0

私はRPGのWebサイトを持っています。ユーザは登録時に名前を設定できるようにしますが、プロフィールを編集しているときは設定しないようにします。しかし私はそれを編集できる管理者として欲しい。更新する属性を保護する

私は更新アクションでupdate_attributesを使用しているので、私が提供する古典的なフォームを使用していないfirst_nameを更新できると思います。

ActiveRecordの検証でこれを行う方法はありますか、コントローラで行う方法はありますか?

ありがとうございます!

答えて

3

Userモデルにattr_accessible :name, :as => :adminを追加し、サインアップコントローラで@user.update_attributes(params[:user], :as => :admin)を使用してください。 updateアクションの代わりに:as => :adminオプションを使用しないで@user.update_attributes(params[:user])を使用する必要があります。このトピックに関する

より:Rails 3.1 Overview

+0

これは素晴らしいことです!異なるアクションで ':as =>:signup'と':as =>:admin'を使用できると思いますか?そしてユーザーattr_accessibleとして:サインアップと:admin? – Cydonia7

+0

ええ、可能でしょう! –

0

あなたはログインしたユーザーへのアクセス権を持っているところコントローラがあるので、これは、コントローラを介して行うことが簡単です。だから、あなたのコントローラで:

# When the form is submitted 
unless @current_user.is_an_admin? 
    # List of attributes to allow non-admins to change 
    allowed_fields = %w[allowed_field_1 allowed_field_2] 
    # Remove any non-allowed fields from the params 
    params[:user].delete_if {|key, value| !allowed_fields.include?(key.to_s)} 
end 
@user.update_attributes(params[:user]) 

あなた Userモデルを通してそれを行うことができますが、あなたがモデルに編集者の地位を渡すためにいくつかの方法があり、その後、条件付きの検証の束を追加する必要があるだろう。

+0

同意しない!コントローラはきれいでなければならず、これは間違いなくモデルの課題です。 –

+0

Eh .... IMHO、これをモデルに渡すとMVCが壊れます。現在のユーザーとその管理者のステータスは基本的にセッション変数に依存しており、セッションは本質的にモデルではなくコントローラの一部です。これらの2つのモデルが直接関連付けられていない限り、モデルメソッドは他のモデルの状態に決して依存してはなりません。 –

関連する問題