【问题标题】:Rspec-rails 4 error: ActiveModel::ForbiddenAttributesErrorRspec-rails 4 错误:ActiveModel::ForbiddenAttributesError
【发布时间】:2014-05-18 19:28:45
【问题描述】:

我有一个应用程序在 rails 4.1 中运行,使用 mongoid 作为 orm。我创建了一个名为User 的模型,它有一个属性email。我正在使用RSpec 进行测试。我创建了以下规范

require 'spec_helper'

describe 'User' do

  before(:each) do
    @attr = { 
      user: {
        email: "rahul@gmail.com"
      }
    }
  end

  it "should create a valid User instance" do
    param = ActionController::Parameters.new(@attr)
    param.require(:user).permit!
    User.create!(param)
  end
end

当我运行规范时,我收到以下错误

失败/错误:User.create!(param) ActiveModel::ForbiddenAttributesError: ActiveModel::ForbiddenAttributesError

我知道这与强参数有关,但无法弄清楚我做错了什么。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rspec mongoid strong-parameters


    【解决方案1】:

    来自fine manual

    要求(键)

    [...] 在给定的key [...] 处返回参数 [...]

    所以说param.require(:user)param 没有任何作用,它只是进行存在性检查并返回 param[:user]

    我想你想说的更像是这样的:

    param = ActionController::Parameters.new(@attr)
    User.create!(param.require(:user).permit!)
    

    这种用法将与通常的用法相匹配:

    def some_controller_method
        @user = User.create(user_param)
    end
    
    def user_param
        param.require(:user).permit!
    end
    

    在控制器中的使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多