我对active_admin相当新,我想知道是否有办法实现以下目标
我有两个型号
User
belongs_to :group
Group
has_many :users
我已成功为组和用户创建activeadmin页面,现在我想要的是显示属于某个组的用户。我在组索引页面上有按钮manage_members,它应该只显示该组的成员。我可以从组中删除成员或添加更多成员。
这是我迄今为止所做的事情
member_action :manage_members do
@group = Group.find(params[:id])
@page_title = "Manage Groups > @#{@group.name}, Edit Members"
end
和视图app / vies / admin / groups / manage_users.html.arb
table_for assigns[:group].users do
column "Name" do |u|
u.user_id
end
column "email" do |u|
u.user.email
end
column "Created Date" do |u|
u.user.created_at
end
column "OfficePhone" do |u|
u.user.office_no
end
end
这显示了组的成员,但是我必须在这个页面上做所有的工作来添加编辑删除一个成员,我不能在这里有active_admin过滤器和其他很酷的东西,这就像一个自定义页面,
是否有办法建立索引页面(具有过滤器批处理操作的所有优点等)(如用户的那些),但只显示组的用户。像一个范围索引页面,它显示在一个组的用户,我对该页面的控制与任何活动的管理索引页面相同?更像是下面的图片
而不是必须完成我目前看起来像
的所有工作
对于active_admin来说,这是非常新的,如果我确实缺少了一些非常直接的东西,请道歉。
由于
答案 0 :(得分:1)
也许过滤器会这样做。这看起来像(把它放在你放置member_action的文件中)
filter :group, :as => :select, :collection => proc { Group.for_select }
proc用于确保对组(添加/删除/ ..)的更改立即反映到过滤器中的选择列表中。这与生产中的类缓存有关。 别忘了将此范围放在您的组模型中。
scope :for_select, :select => [:id, :name], :order => ['name asc']
另一种方法是使用范围。如果你的Group模型中有一个字段,比如可以作为方法头的slug / label,那么你可以在activeadmin用户注册块中执行类似的操作:
Group.all.each do |group|
# note the sanitization of the Group name in the gsub
scope "#{group.name.gsub(/-/,'_')}".to_sym
end
这在您的用户模型中:
Group.all.each do |group|
# note the sanitization of the Group name in the gsub
scope "#{group.name.gsub(/-/,'_')}".to_sym, joins(:group).where("group.name = ?",role.name)
# using joins(:group) or joins(:groups) makes a difference,
# so not sure as I have not tested, but maybe the where should be
# ....where("groups.name = ....
end
它应该为您提供索引视图上方的漂亮按钮,例如:http://demo.activeadmin.info/admin/orders
如果你想要这个与has_and_belongs_to_many的关系,我建议你看看这个Rails3 Active Admin - How to filter only records that meet all checked items in collection
祝你好运!