0

私はactive_adminにかなり慣れていないので、次のことを実現する方法があるかどうか疑問に思いました。

私は2つのモデルを持っています

User
  belongs_to :group

Group
 has_many :users

activeadminでグループとユーザーのページを正常に作成しました。今、必要なのは、特定のグループに属するユーザーを表示することです。グループのインデックスページに、そのグループのメンバーのみを表示するボタンmanage_membersがあります。グループからメンバーを削除したり、メンバーを追加したりできる場所。

これは私がこれまでにできたことです

member_action :manage_members do
    @group = Group.find(params[:id])
    @page_title = "Manage Groups > @#{@group.name}, Edit Members"
end

およびビューapp/vies / admin / groups / manage_users.html.arb

table_for assigns[:group].users do
  column "Name" do |u|
    u.user_id
  end
  column "email" do |u|
    u.user.email
  end
  column "Created Date" do |u|
    u.user.created_at
  end

  column "OfficePhone" do |u|
    u.user.office_no
  end
end

これはグループのメンバーを示していますが、メンバーを追加、編集、削除するには、このページですべての作業を行う必要があります。ここにactive_adminフィルターやその他のクールなものを含めることはできません。これは、カスタムページのようなものです。

インデックスページ(フィルターバッチアクションなどのすべての長所を備えた)(ユーザーのような)を作成する方法はありますが、グループのユーザーのみを表示します。グループのユーザーに表示されるスコープ付きインデックスページのようなもので、アクティブな管理者インデックスページと同じようにそのページを制御できますか?下の画像のように

これが私がインデックスページで意味することです

現在のように自分自身ですべての作業を行う必要はありません

これは欲しくない

active_adminは非常に新しいので、私が見逃している本当に簡単なことがある場合はお詫びします。

ありがとう

4

1 に答える 1

1

たぶんフィルターで十分でしょう。これは次のようになります(member_actionを配置したのと同じファイルに配置します)

filter :group, :as => :select, :collection => proc { Group.for_select }

procは、グループへの変更(追加/削除/ ..)がフィルターの選択リストにすぐに反映されるようにするためにあります。これは、本番環境でのクラスキャッシングと関係があります。このスコープをグループモデルに含めることを忘れないでください。

scope :for_select, :select => [:id, :name], :order => ['name asc']

別の方法は、スコープを使用することです。グループモデルに、メソッドヘッダーとして機能するスラッグ/ラベルなどのフィールドがある場合は、activeadminユーザー登録ブロックで次のように実行できます。

Group.all.each do |group|
  # note the sanitization of the Group name in the gsub
  scope "#{group.name.gsub(/-/,'_')}".to_sym
end

そしてこれはあなたのユーザーモデルにあります:

Group.all.each do |group|
  # note the sanitization of the Group name in the gsub
  scope "#{group.name.gsub(/-/,'_')}".to_sym, joins(:group).where("group.name = ?",role.name)  
  # using joins(:group) or joins(:groups) makes a difference,
  # so not sure as I have not tested, but maybe the where should be
  # ....where("groups.name = ....
end

http://demo.activeadmin.info/admin/ordersのように、インデックスビューの上に素敵なボタンが表示されるはずです。

has_and_belongs_to_many関係でこれが必要な場合は、このRails3アクティブ管理者を確認することをお勧めします -コレクション内のすべてのチェック済みアイテムを満たすレコードのみをフィルタリングする方法

幸運を!

于 2013-02-25T15:45:05.400 に答える