プライベートリソースを処理するために、Devise、CanCan、Rolifyに基づいたアプリケーションを作成しています。
ユーザーを追加/編集するための管理インターフェイスを作成しているときに、ユーザーに登録を許可したくないため、デバイスの登録が無効になっています。
今、私はユーザーの役割を扱っています。管理者が同じフォームを使用してユーザーを作成し、その役割を設定できるようにしたいと思います。私はrailsにかなり慣れていないので、どのような関係がrolifyを使用しているかわかりません。また、Rubyとrolifyrolify
は、より明確な関係の代わりにメソッドを追加しました。
現在、ユーザーごとに1つの役割のみが必要であり、必要です。したがって、誰かが役割を変更してユーザーを編集した場合、私はすべてを削除して@user.roles
から、新しい役割を設定します。
私は現在、単純なハックを使用して動作させるようにしています。Role
のコレクションを使用して役割の選択を提供する選択フィールドをフォームに追加しました。次にcreate
、update
メソッド内でこれを実行しています。
role = params[:user][:role]
params[:user].delete :role
@user = User.new(params[:user])
respond_to do |format|
if @user.save # update_attributes inside update
@user.add_role role
# ...
end
end
ご覧のとおり、私はRole
モデルを直接操作しているのではなく、提供されているadd_role
メソッドを使用しています。これはまた別の問題を引き起こします。なぜなら、更新ビューが選択の適切なデフォルト値を設定できるようにするために現在の役割を取得する必要があるからです(1つの役割の存在を検証する方法がわからないという最も重要な事実に加えて)。
これはあまりにも汚れた解決策になるので、私はいくつかの視点を持ち、おそらくこれを行う方法についていくつかの提案をしたいと思います。私はこれに一日中取り組んできました:-(
情報が必要な場合は私に聞いてください。
PSネストされたリソースに関するスクリーンキャストを見ていますが、DBで、追跡するために3番目のテーブルを使用していることがusers_roles
わかり、その方法がわかりません。ありがとう!!