2012-05-04 9 views
5

Devise、CanCan、およびRolifyに基づいて私的リソースを処理するアプリケーションを作成しています。Railsユーザーフォームを使用してrolifyロールを追加

ユーザーを登録/編集するための管理インターフェースを作成している間は、ユーザーに登録者を許可したくないため、Devise登録が無効になっています。

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

現在、ユーザーごとに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方法を使用していない見ているよう。これはまた、現在のロールを取得して、更新ビューがselectの適切なデフォルト値を設定できるようにするために別の問題を引き起こします(ONEロールの存在を検証する方法がわからないという最も重要な事実の横にあります)。

これはあまりにも汚い解決策になるので、私はいくつかの視点を持ちたいと思います。私はこの:-(

に取り組んですべての一日を過ごしたあなたには、いくつかの情報が必要な場合は私に聞いてください。私は、ネストされたリソースに関するscreenscastを見てる

PSが、DBに私はそれが使っていることがわかりありましたusers_rolesを追跡するために、私はそれを行う方法を理解していないよ3番目のテーブル。

答えて

2

!! おかげで、私はRolifyをオフにドロップすることが好ましい終わり。 それは私のためにあまりにも多くの時間を取っていた、と私は実現もっと簡単な解決策が必要なので、私のモデルではユーザの新しいコラムを使用しています。また、CanCanとの互換性を保つためにhas_roleに似たメソッドを実装しました。

これは多くの問題を解決しました。これはより一般的な解決策です(より簡単なヘルプです)。

私の経験では、誰もあなたの質問に30分で答えなければ、それはあまりにも複雑になっていることに気付きました。

ありがとうございました。

+0

lol ...私はあなたの道を行くことになった、Rolify宝石は把握するためにあまりにも多くの時間を取っていた。 – Benjamin

+1

笑、いいです。それはまだ有効なツールのままですが、簡単なこととして、簡単な文字列/整数フィールドを作成する方がはるかに簡単だと思います。 –

関連する問題