5

在我的应用程序中一切正常,但在我的 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 中工作?

4

6 回答 6

13

我自己没有测试过这个,但我相信你需要从“列”中的块返回一个字符串,所以像

column "Role" do |user|
  user.roles.map({ |p| p.name }).join(' ')
end

可能会奏效。

于 2011-09-16T18:10:41.890 回答
5

这是工作代码(在我的情况下):

column "Role" do |user|
  user.roles.map { |p| p.name }.join('<br />').html_safe
end

数组映射函数: http ://corelib.rubyonrails.org/classes/Array.html#M000427

于 2011-09-18T20:09:44.650 回答
3

为了能够从管理员操作关联,除了索引块中的代码之外,您还需要向表单块添加一个输入。您还可以将用户角色添加到显示块内的显示屏幕。

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
于 2011-10-05T14:43:14.043 回答
1

您还可以添加指向列表中项目的链接。(当然,这仅在您列出的模型(在本例中为“角色”)也是 ActiveAdmin 资源时才有意义)

例子:

column "Role" do |user|
  user.roles.map { |p| link_to p.name admin_role_path}.join(' ,').html_safe
end

不确定这是否适用于您的情况,但我发现它很有用。

于 2012-06-13T02:08:15.333 回答
0

这对我有用:

column :role do |user|
   user.role.map{ |role| role.name }.join(' ')
end
于 2013-04-06T23:59:15.130 回答
0

要将它们与auto_link上述评论之一中提到的链接:

column "Role" do |user|
  user.roles.map { |p| auto_link(p) }.join(', ').html_safe
end
于 2015-04-19T08:49:51.673 回答