5

私のアプリケーションではすべて正常に動作しますが、Active Adminバックエンドでは画面にユーザーロールが表示されません。私はそれがレールコンソールで動作するように取得ActiveAdmin - DSLでHABTM /多次元配列を実装する

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 

は、私は2つのモデル「ユーザー」と「ロール」を持つ

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" 

をそして私はアクティブでこれを実現するためのいくつかの方法を試してみました管理者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で動作させるにはどうすればよいですか?

答えて

13

私はこれを自分でテストしていませんが、私はあなたが「列」内のブロックから文字列を返すように、そう

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

のようなものが働くかもしれない必要があると考えています。 (私の場合)動作するコードです

+1

それが働いています!ありがとうございました!!!!!どうもありがとうございます!!! :) OMG、私はそれを信じることができません。それは働いています:) – user930328

+1

これは私のためにエラーを投げたが、マップの周りの '()'を削除すると問題が解決した。 – jordancooperman

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 
+0

あなたがこれをちょうど1週間前に投稿したのであれば:Dこれまでに私はすでにそれを自分で見つけ出しました。しかし、それを投稿していただきありがとうございます。さらなる参考のためにここに残しましょう。それは他の誰かを助けるかもしれません:) – user930328

+0

@ user930328:私は最初のRailsプロジェクトのためにActiveAdminをカスタマイズしなければなりませんでした。この質問は正しい方向に私を指摘しました。私も残りの部分を自分で見つけ出し、ActiveAdminのドキュメントにはないので、役に立つと思う人のために投稿しなければなりませんでした。 – dkobozev

+0

私たちはそこにいますが、フィルターについても同じ質問があります: サイドバーのロールにフィルターをかけたいですか?しかし、「ロール」は物理的にデータベース内の属性として存在しないため、AAはそれを表示しません。私はすでに私のユーザモデルのメソッドとして定義しようとしました。 AAはそれについても気にしない。フィルタは表示されません:(任意のアイデア? – user930328

1

また、リスト内の項目へのリンクを追加することもできます。 (もちろん、これが唯一のモデルは、あなたがこの場合-in上場している場合は、「役割」理にかなって - もActiveAdmin資源である)

例:

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

ない、これはあなたに適用されるかどうかわから私はそれが有用であることを発見しました。

+0

私のためには機能しませんでしたが、代わりに「auto_link」関数が見つかりました。http://www.rubydoc.info/github/gregbell/active_admin/ActiveAdmin/ViewHelpers/自動リンクヘルパー –

0

これが私の作品:

column :role do |user| 
    user.role.map{ |role| role.name }.join(' ') 
end 
0

上記のコメントの1で述べたようにauto_linkでそれらをリンクするには:

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