5

プライベートリソースを処理するために、Devise、CanCan、Rolifyに基づいたアプリケーションを作成しています。

ユーザーを追加/編集するための管理インターフェイスを作成しているときに、ユーザーに登録を許可したくないため、デバイスの登録が無効になっています。

今、私はユーザーの役割を扱っています。管理者が同じフォームを使用してユーザーを作成し、その役割を設定できるようにしたいと思います。私はrailsにかなり慣れていないので、どのような関係がrolifyを使用しているかわかりません。また、Rubyとrolifyrolifyは、より明確な関係の代わりにメソッドを追加しました。

現在、ユーザーごとに1つの役割のみが必要であり、必要です。したがって、誰かが役割を変更してユーザーを編集した場合、私はすべてを削除して@user.rolesから、新しい役割を設定します。

私は現在、単純なハックを使用して動作させるようにしています。Roleのコレクションを使用して役割の選択を提供する選択フィールドをフォームに追加しました。次にcreateupdateメソッド内でこれを実行しています。

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わかり、その方法がわかりません。ありがとう!!

4

1 に答える 1

2

最後に、私はRolifyを降ろすことを好みました。時間がかかりすぎて、もっと簡単なソリューションが必要だと気付いたので、モデルでユーザーを説明する新しい列を使用しています。また、has_role?と同様のメソッドを実装しました。CanCanとの互換性を保つため。

これは多くの問題を解決しました、そしてそれはより一般的な解決策です(=より簡単な助け)。

私の経験では、30分以内にSOに関する質問に誰も答えない場合は、複雑すぎることに気づきました。

みんなありがとう。

于 2012-05-05T12:37:23.173 に答える