これを機能させるには、いくつかのコントローラーコードを追加する必要がありました。これが役立つことを願っています:
active_admin で受け入れる属性を許可することを忘れないでください (これにより、permitted_params
後で参照するメソッドが作成されます。
role_ids をユーザーに直接保存していないため、許可されたパラメーターである必要さえないことに注意してください。
permit_params :email, :password, :etc
create および update コントローラーから呼び出すことができるプライベート メソッドを作成します。このメソッドは、空でない ID を繰り返し処理し、関連付けられたロールを見つけて、それらを に追加しますuser.roles
。
add_roles
create メソッドと update メソッドは、実行を継続する前にメソッドを呼び出すだけです。ActiveAdmin は既存のユーザーをで利用できるようにしますresource
が、create では利用できません。クリエイトで自分で見つけなければなりません!
controller do
def create
@user = User.new(permitted_params[:user])
add_roles(@user)
create!
end
def update
add_roles(resource)
update!
end
private
def add_roles(resource)
resource.roles = []
params[:user][:role_ids].each { |r| resource.roles.push(Role.find(r)) unless r.blank? }
end
end
activeadmin フォームでは、以下を追加できます。
form do |f|
# other inputs
f.input :roles, as: :select, multiple: true, collection: Role.all
end
ショーページでは、ロールを次のように表示できます。
show do
attributes_table do
# other rows
row :roles do |r|
r.roles.map { |role| role.name }.join(", ")
end
end
お役に立てれば!