2012-04-03 34 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

相關問題