4

Lynda.comのチュートリアルRubyonRail 3EssentialTrainingをフォローしています。ActiveRecordエントリを作成するのに苦労しています。これは、コンソールで発生するエラーです。

1.9.3p125 :007 > user = User.new(:first_name => "Mike", :last_name => "Jones")
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: first_name, last_name
    from /home/mark/.rvm/gems/ruby-1.9.3-p125/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb:48:in `process_removed_attributes'
    from /home/mark/.rvm/gems/ruby-1.9.3-p125/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb:20:in `debug_protected_attribute_removal'
    from /home/mark/.rvm/gems/ruby-1.9.3-p125/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb:12:in `sanitize'
    from /home/mark/.rvm/gems/ruby-1.9.3-p125/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security.rb:230:in `sanitize_for_mass_assignment'
    from /home/mark/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.3/lib/active_record/attribute_assignment.rb:75:in `assign_attributes'
    from /home/mark/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.3/lib/active_record/base.rb:498:in `initialize'
    from (irb):7:in `new'
    from (irb):7
    from /home/mark/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.3/lib/rails/commands/console.rb:47:in `start'
    from /home/mark/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.3/lib/rails/commands/console.rb:8:in `start'
    from /home/mark/.rvm/gems/ruby-1.9.3-p125/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>`

これは私のモデルにあるものです:

class User < ActiveRecord::Base
  attr_accessible :first_name, :last_name
end

私は何を間違っているのですか。私はレール3.2.3を持っています

4

6 に答える 6

10

私が知っていることから、lyndaコースはrails3とrails 3.2.3で開発されており、デフォルトではマス割り当てはありません。モデルに移動して、attr_accessible:name、:position、:visibleを追加する必要があります。基本的に、一括割り当てするすべての属性を追加する必要があります。

于 2012-04-22T20:37:00.763 に答える
4

コンソールを再起動してみてください。コンソールの起動後にユーザーのモデルを作成した場合は、再起動する必要があります。

于 2012-04-17T00:13:37.673 に答える
2

何の予防措置もなしに、一括割り当てにより、攻撃者はデータベース列の値を設定できるため、デフォルトで無効になっています。

def signup
  params[:user] # => {:name => “ow3ned”, :admin => true}
  @user = User.new(params[:user])
end

詳細な説明は、RubyOnRailsセキュリティガイドにあります。

于 2012-05-18T15:24:56.480 に答える
2

モデルファイルにattr_accessible:first_name、:last_name、:username行を追加しました。これは私のために働いた。

于 2012-07-09T01:51:34.850 に答える
2

私はLynda.comのチュートリアルRubyonRail 3 Essential Trainingに沿ってフォローしすぎていました。ここで同じ問題が発生した場合は、私にとってはうまくいきました。

セキュリティ設定をオフにします。config / application.rbを開き、config.active_record.whitelist_attributesをtrueではなくfalseに変更します。これにより、アプリの安全性が少し低下しますが、チュートリアルをすばやく進めることができます。これは次のサイトからのものです:http ://www.lynda.com/Ruby-on-Rails-3-tutorials/essential-training/55960-2/faqs

于 2013-02-12T16:57:23.087 に答える
0

コントローラではなく、必ずattr_accessible :first_name, :last_nameユーザーモデルを入力してください。

于 2012-09-26T23:01:20.507 に答える