ActiveAdmin - 在DSL中实现HABTM /多维数组

use*_*328 5 arrays ruby-on-rails has-and-belongs-to-many ruby-on-rails-3 activeadmin

在我的应用程序中一切正常,但在我的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
Run Code Online (Sandbox Code Playgroud)

我让它在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" 
Run Code Online (Sandbox Code Playgroud)

我在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
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?如何让它在Active Admin的DSL中运行?

Mic*_*ein 13

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

column "Role" do |user|
  user.roles.map({ |p| p.name }).join(' ')
end
Run Code Online (Sandbox Code Playgroud)

可能有用.


use*_*328 5

那是工作代码(在我的例子中):

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

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