Rails 4/ActiveAdmin: 添加 link 以列出来自 has_many 关系的所有对象

Rails 4/ActiveAdmin: Add link to list all objects from has_many relationship

我正在使用 cached_counter 来跟踪用户的所有评论。 我的模型关系如下所示:

class User  < ActiveRecord::Base  
  has_many :comments
end 

class Comment < ActiveRecord::Base
 comment belongs to user, counter_cache: true
end 

用户 table 持有计数变量。 在 Activeadmin 中,我有一列 :comments_count 显示每个用户的评论数量。 到目前为止,一切都很好。 现在我想稍微修改一下。我想添加一个 link 指向列出所有评论的页面。怎么做到的?

我正在检查 AA [现场演示][1],因为他们在那里做类似的事情。

我的想法是创建局部视图并 link_to 它。但我正在努力实施它,我不知道这是否是 最佳实践 无论如何。 我有这个查询

 Comments.where(:User_id => :id)

但是如何将它嵌入到列中?

感谢任何建议。

您可以通过链接到 Comment 的管理索引页面来处理这种情况,并为给定的 user_id 预设过滤器。这需要比自定义页面少得多的代码,并使您可以直接访问范围、过滤器等。

方法如下:

index do
  # make sure you set sortable, so you can click to sort!
  column :comments_count, sortable: 'users.comments_count' do |user|
    link_to user.comments_count,
            admin_comments_path(q: { user_id_eq: user.id })
  end
end

编辑:

ActiveAdmin 索引控制器使用 Ransack 来处理搜索和过滤。 Ransack 接受遵循某种 DSL 的散列形式的查询选项(上面的 user_id_eq 位就是一个例子)。现在,如果您打开任何 ActiveAdmin 索引路由并开始使用过滤器,您将看到这些参数使用相同的约定添加到 url 的末尾。 ?q=... 部分直接传递给索引控制器中的 Ransack,这就是您的模型被过滤的方式。我们上面的代码只是链接到带有 id 过滤器预设的索引页面。您还可以添加其他过滤器、排序顺序,甚至范围。