2

新しいユーザーを作成しようとすると、

ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: name
    from c:/RubyOnRails/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/
 activemodel-3.2.3/lib/active_model/mass_assignment_security/
 sanitizer.rb:48:in  `process_removed_attri
 butes'
4

3 に答える 3

3

いくつかのこと:

一括代入とは、通常、属性ハッシュの一部としてオブジェクトを作成する呼び出しに属性を渡すことを意味します。つまり、新しいオブジェクトを作成する呼び出しに、一連の属性をハッシュで渡します。例えば:

@user = User.create({:name => "My name", :user_type => "nice_user"})

ただし、Rails にはいくつかの基本的なセキュリティ ルールが含まれており、デフォルトですべての属性をそのように割り当てることができるわけではありません。どちらができるかを事前に指定する必要があります。次のようにします。

class user < ActiveRecord::Base
  attr_accessible :name, :user_type
end

属性 is を指定せずattr_accessible、それを渡してオブジェクトを作成すると、投稿したエラーが発生します。

詳細は次のとおりです。

http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html

別の方法は、最初にレコードを作成するときにいくつかの属性を設定し、後で他の属性を設定することです-次のように:

# In this example `user_type` is not attr_accessible so it needs to be set specifically
@user = User.create({:name => "My name"})
@user.user_type = "nice_user"
@user.save
于 2012-07-02T13:05:08.030 に答える
1

モデルコードを共有していただければ助かりました。

モデルファイルで、ユーザーを attr_accessible に追加します

attr_accessible :name
于 2012-07-02T12:03:43.313 に答える
1

config/application.rbには、次の行があります。

config.active_record.whitelist_attributes = true

モデル内で、次の行を見逃しています。

attr_accessible :name

設定ファイルは変更せず、attr_accessible. 大量割り当てのセキュリティ問題をよりよく理解するには、 http: //guides.rubyonrails.org/security.html#mass-assignmentを読む必要があります。

于 2012-07-02T12:03:45.583 に答える