2012-04-16 82 views
3

我正沿着Lynda.com上的Ruby on Rail 3 Essential Training教程进行操作。我在创建活动记录条目时遇到困难。这是我在控制台中遇到的错误。ActiveModel :: MassAssignmentSecurity ::错误:无法批量分配受保护的属性:

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

尝试重新启动控制台。如果您在控制台启动后为用户创建了模型,则应重新启动它。

+0

谢谢你的工作!没有意识到这很简单。 – 2012-04-17 01:16:35

+1

重新加载!在控制台应该重新加载控制台,所以你不必重新启动它 – ejunker 2012-10-03 00:56:16

10

据我所知,lynda课程是在rails3和rails 3.2.3上开发的,默认情况下没有质量分配。你必须去你的模型并添加attr_accessible:name,:position,:visible。基本上你必须添加你想批量分配的每个属性。

+0

非常感谢Thats工作 – 2012-04-27 19:55:27

2

没有任何预防措施批量分配允许攻击者设置任何数据库列的值,因此默认情况下它已被禁用。

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

详细描述在Ruby On Rails Security Guide

2

我刚刚将attr_accessible:first_name,:last_name,:username行添加到模型文件中。 这对我有用。

0

确保将attr_accessible :first_name, :last_name置于用户模型中,而不是在控制器中。

2

我太沿着教程的Ruby on从Lynda.com轨道(3)的基本训练之后,如果任何人有同样的问题这里是为我工作,

关闭安全设置。打开config/application.rb并将config.active_record.whitelist_attributes更改为false而不是true。这会让您的应用程序不太安全,但可以让您快速地继续学习本教程。 这是从:http://www.lynda.com/Ruby-on-Rails-3-tutorials/essential-training/55960-2/faqs

相关问题