5

私のアプリケーションではすべて正常に動作しますが、アクティブ管理者のバックエンドではユーザー ロールが画面に表示されません。

「ユーザー」と「ロール」の 2 つのモデルがあります。

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 でこれを実装するいくつかの方法を試しました (そのうちの 1 つ):

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

管理者から関連付けを操作できるようにするには、index ブロックのコードに加えて、フォーム ブロックに入力を追加する必要があります。show ブロック内の 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
于 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 に答える