我正在使用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)
但是如何将其嵌入到列中?
感谢您的任何建议。
答案 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
过滤器。您也可以添加其他过滤器,排序顺序甚至范围。