【问题标题】:RSpec gives ActiveModel::MassAssignmentSecurity::ErrorRSpec 给出 ActiveModel::MassAssignmentSecurity::Error
【发布时间】:2012-04-16 16:58:27
【问题描述】:

我正在关注 Railstutorial.org 并在使用 Rspec 时遇到 MassAssignment 错误。

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

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

  ...
  before do
     @user = User.new(name:"Example", email:"example@gmail.com", 
                                password: "foobar", password_confirmation: "foobar" )
  end

  subject { @user }
  ...

是否可以在开发或测试模式下禁用 MassAssignment 保护?或者当 RSpec 运行时? 任何帮助都会很棒!谢谢

【问题讨论】:

  • 当这些属性被标记为可以批量分配时,此错误将在本教程稍后得到修复:“attr_accessible :name, :email, :password, :password_confirmation”。 (ruby.railstutorial.org/chapters/…)

标签: ruby-on-rails-3 rspec railstutorial.org mass-assignment


【解决方案1】:

你可以避免批量分配:

before do
  @user = User.new(name:"Example", email:"example@gmail.com").tap do |u|
    u.password = "foobar"
    u.password_confirmation = "foobar"
  end
end

【讨论】:

【解决方案2】:

您可以单独分配属性,而不是使用批量分配。

@user = User.new(name:"Example", email:"example@gmail.com")
@user.password = "foobar"
@user.password_confirmation = "foobar" 

【讨论】:

  • 错过了那个
猜你喜欢
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多