4

Ich verfolge Railstutorial.org und erhält MassAssignment Error bei der Verwendung von Rspec.RSpec gibt ActiveModel :: MassAssignmentSecurity :: Fehler

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 

Wahrscheinlich, weil ich versuche, vor Variablen in RSpec zuweisen:

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

    subject { @user } 
    ... 

Ist es möglich, MassAssignment Schutz in Entwicklungs- oder Testmodus zu deaktivieren? Oder wenn RSpec ausgeführt wird? Jede Hilfe wäre großartig! Danke

+3

Dieser Fehler wird etwas später im Tutorial festgelegt werden, wenn diese Attribute als ok für Massenzuordnung markiert sind: „attr_accessible: Name,: E-Mail ,: passwort,: passwort_bestätigung ". (http://ruby.railstutorial.org/chapters/modeling-users?version=3.2#sec:has_secure_password) – aem

Antwort

7

Sie könnten nur die Massenzuordnung vermeiden:

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

Vielen Dank, hat super funktioniert! Kannst du mir sagen, was ist tippen und wann oder wie? oder einen Link darüber geben? Danke – YogiZoli

+2

'tap' ist hier dokumentiert: http://ruby-doc.org/core-1.9.3/Object.html#method-i-tap. Beachten Sie, dass pre-1.9, 'tap', als Erweiterung in Rails verfügbar ist: http://apidock.com/rails/v2.3.8/Object/tap – zetetic

3

Sie können die Attribute separat zuweisen und keine Massenzuordnung verwenden.

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

verpasst es durch * das * viel! zetetic

+0

Getestet und es funktioniert auch super, danke – YogiZoli