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
过滤器预设的索引页面。您还可以添加其他过滤器、排序顺序,甚至范围。
我正在使用 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
过滤器预设的索引页面。您还可以添加其他过滤器、排序顺序,甚至范围。