1

RORに問題があります:

'category2'という名前のモデルを作成したいので、次のコマンドを使用しました。

railsgモデルcategory2

次に、ファイル* db / migrate /20120521113409_create_category2s.rb*を次のように変更しました。

クラスCreateCategory2s<ActiveRecord:: Migration

デフチェンジ

create_table :category2s do |t|

  t.string :name

  t.integer :position

  t.timestamps

end

add_column:events、:category2_id、:integer
add_index:events、:category2_id
end

終わり

それから、

bundle exec rake db:migrate

コンソールを開いて入力すると

b = Category2.new(:name =>'Ruby'、:position => 1)

エラーを返します:

irb(main):009:0> b = Category2.new(:name =>'Ruby'、:position => 1)

ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: name, position

from /usr/local/lib/ruby/gems/1.9.1/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb:48:in `process_removed_attributes'

from /usr/local/lib/ruby/gems/1.9.1/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb:20:in `debug_protected_attribute_removal'

from /usr/local/lib/ruby/gems/1.9.1/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb:12:in `sanitize'

from /usr/local/lib/ruby/gems/1.9.1/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security.rb:230:in `sanitize_for_mass_assignment'

from /usr/local/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/attribute_assignment.rb:75:in `assign_attributes'

from /usr/local/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/base.rb:498:in `initialize'

from (irb):9:in `new'

from (irb):9

from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands/console.rb:47:in `start'

from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands/console.rb:8:in `start'

from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:41:in `<top (required)>'

from script/rails:6:in `require'

from script/rails:6:in `<main>'

その意味?

パラメータを追加しない場合は、次のように入力します。

irb(main):008:0> a = Category2.new

=>#<Category2 id:nil、name:nil、position:nil、created_at:nil、updated_at:nil>

よさそうだ!

しかし、なぜ「名前」と「位置」を指定できないのでしょうか。

ありがとう!

4

3 に答える 3

5

RailsのActiveModelは、 attr_accessibleのようなものを使用してこれが可能であると明示的に述べていない限り、属性に値を割り当てないようにすることで、コードを一括割り当ての脆弱性から保護します。 この投稿は、大量割り当ての脆弱性が何であるかについての良い説明を提供します。

あなたの例では、次のようなものを追加する必要があります。

attr_accessible :name, :position

オブジェクトの作成時にこれらの値を割り当てるために、モデルに割り当てます。

于 2012-05-21T14:09:59.953 に答える
1

rails 4よりも小さいrailsバージョンを使用しているため、アクセスするパラメーターを明示的に渡す必要があります。これはセキュリティ上の理由によるものです。ただし、デフォルトでレール4を使用する場合は、レールがこれを処理します。それは強いパラメータと呼ばれます。

したがって、上で述べたように、私のコントローラーとビューがこの属性にアクセスできるようにモデルに指示する必要があります。

  attr_accessible :name, :position
于 2014-12-13T11:29:24.127 に答える
0

モデルにデータフィールドを含めるだけです。

attr_accessible :name, :position

于 2016-04-11T14:23:31.897 に答える