在我的应用程序中,一切正常,但在我的Active Admin后端,我没有在屏幕上显示我的用户角色。
我有两个模型“用户”和“角色”:
class Role < ActiveRecord::Base
has_and_belongs_to_many :users, :join_table => :roles_users
end
class User < ActiveRecord::Base
has_and_belongs_to_many :roles, :join_table => :roles_users
end
我让它在rails控制台中工作:
ruby-1.9.2-p290 :006 > user.roles
=> [#<Role id: 3, name: "Student">, #<Role id: 2, name: "Supervisor">]
ruby-1.9.2-p290 :007 > user.roles[0].name
=> "Student"
ruby-1.9.2-p290 :008 > user.roles[1].name
=> "Supervisor"
我尝试了几种在Active Admin DSL(其中一种)中实现此功能的方法:
ActiveAdmin.register User do
index do
column :email
column "Role" do |user|
user.roles.each do |p|
p.name
end
end
end
end
有人可以帮帮我吗?
如何让它在Active Admin的DSL中运行?
答案 0 :(得分:13)
我自己没有对此进行过测试,但我相信您需要从“列”中的块中返回一个字符串,所以类似
column "Role" do |user|
user.roles.map({ |p| p.name }).join(' ')
end
可能有用。
答案 1 :(得分:5)
这是工作代码(在我的情况下):
column "Role" do |user|
user.roles.map { |p| p.name }.join('<br />').html_safe
end
数组映射函数: http://corelib.rubyonrails.org/classes/Array.html#M000427
答案 2 :(得分:3)
为了能够管理来自admin的关联,除了索引块中的代码之外,还需要向窗体块添加输入。您还可以将用户角色添加到show block中的show screen。
ActiveAdmin.register User do
index do
column :email
column "Role" do |user|
(user.roles.map{ |p| p.name }).join(' ')
end
end
form do |f|
f.inputs do
f.input :email
f.input :roles # add roles input here
end
f.buttons
end
show do
div :class => 'panel' do
h3 'User Details'
div :class => 'panel_contents' do
div :class => 'attributes_table user' do
table do
tr do
th { 'Email' }
td { user.email }
end
tr do
th { 'Roles' }
td { (user.roles.map { |p| p.name }).join(' ') }
end
end # table
end # attributes_table
end # panel_contents
end # panel
end # show
end
答案 3 :(得分:1)
您还可以添加指向列表中项目的链接。 (当然,只有你列出的模型 - 在这种情况下,“角色” - 也是一个ActiveAdmin资源)才有意义
示例:
column "Role" do |user|
user.roles.map { |p| link_to p.name admin_role_path}.join(' ,').html_safe
end
不确定这是否适用于您的情况,但我发现它很有用。
答案 4 :(得分:0)
这对我有用:
column :role do |user|
user.role.map{ |role| role.name }.join(' ')
end
答案 5 :(得分:0)
如上面其中一条评论所述,将auto_link
与column "Role" do |user|
user.roles.map { |p| auto_link(p) }.join(', ').html_safe
end
相关联:
{{1}}