2012-04-03 75 views
4

我跟随Railstutorial.org并使用Rspec时得到MassAssignment错误。RSpec给ActiveModel :: MassAssignmentSecurity ::错误

10) User when email format is invalid should be invalid 
    Failure/Error: @user = User.new(name:"Example", email:"[email protected]", 
    ActiveModel::MassAssignmentSecurity::Error: 
     Can't mass-assign protected attributes: password, password_confirmation 

可能是因为我尝试在RSpec的分配变量:

... 
    before do 
    @user = User.new(name:"Example", email:"[email protected]", 
           password: "foobar", password_confirmation: "foobar") 
    end 

    subject { @user } 
    ... 

是否有可能在开发或测试模式禁用MassAssignment保护?或者当RSpec正在运行? 任何帮助将是伟大的!谢谢

+3

这个错误会得到当这些属性标记为进行质量分配为OK的教程稍后固定的名称,:电子邮件,:密码,:password_confirmation“。 (http://ruby.railstutorial.org/chapters/modeling-users?version=3.2#sec:has_secure_password) – aem 2012-04-29 18:42:15

回答

7

你可能只是避免质量分配:“attr_accessible:

before do 
    @user = User.new(name:"Example", email:"[email protected]").tap do |u| 
    u.password = "foobar" 
    u.password_confirmation = "foobar" 
    end 
end 
+1

非常感谢,效果很好!你能告诉我什么是水龙头,什么时候或如何使用它?或者给出一个关于它的链接?谢谢 – YogiZoli 2012-04-03 03:37:28

+2

'tap'记录在这里:http://ruby-doc.org/core-1.9.3/Object.html#method-i-tap。请注意,在1.9之前,'tap'可在Rails中作为扩展使用:http://apidock.com/rails/v2.3.8/Object/tap – zetetic 2012-04-03 04:20:57

3

您可以单独分配属性而不使用质量分配。

@user = User.new(name:"Example", email:"[email protected]") 
@user.password = "foobar" 
@user.password_confirmation = "foobar" 
+0

错过了* that that * much! zetetic 2012-04-03 03:04:48

+0

经过测试,它也很好,谢谢 – YogiZoli 2012-04-03 03:37:47

相关问题