Rails 4 / ActiveAdmin:添加链接以列出has_many关系中的所有对象

时间:2015-09-16 16:00:49

标签: ruby-on-rails-4 activeadmin

我正在使用cached_counter来跟踪用户的所有评论。 我的模型关系看起来像这样:

class User  < ActiveRecord::Base  
  has_many :comments
end 

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

并且用户表包含计数变量。 在Activeadmin中,我有一列:comments_count,显示每个用户的评论数量。 到现在为止还挺好。 现在我想稍微修改一下。我想添加一个链接,指向列出所有注释的页面。怎么办呢?

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

我的想法是创建一个局部视图并将其链接到它。但我正在努力实施它,我不知道这是否是最佳实践。 我有这个查询

 Comments.where(:User_id => :id)

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

感谢您的任何建议。

1 个答案:

答案 0 :(得分:3)

您可以通过链接到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过滤器。您也可以添加其他过滤器,排序顺序甚至范围。