4

Я следую Railstutorial.org и получает сообщение MassAssignment при использовании Rspec.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

Эта ошибка будет исправлена ​​чуть позже в учебнике, когда эти атрибуты помечены как нормально для массового назначения: «attr_accessible: имя,: электронная почта ,: password,: password_confirmation ". (http://ruby.railstutorial.org/chapters/modeling-users?version=3.2#sec:has_secure_password) – aem

ответ

7

Вы могли бы просто избежать массового назначения:

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

Спасибо большое, отлично работает! Можете ли вы рассказать мне, что происходит, когда и как его использовать? или дать ссылку на это? спасибо – YogiZoli

+2

'tap' задокументирован здесь: http://ruby-doc.org/core-1.9.3/Object.html#method-i-tap. Обратите внимание, что pre-1.9, 'tap' доступен как расширение в Rails: http://apidock.com/rails/v2.3.8/Object/tap – zetetic

3

Вы можете назначить атрибуты отдельно и не использовать массовое присвоение.

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

пропустил это * это * много! zetetic

+0

Протестировано, и он также отлично работает, спасибо – YogiZoli

Смежные вопросы