Rails存在验证没有在params键中作为数组工作

时间:2016-10-21 12:30:06

标签: ruby-on-rails ruby validation strong-parameters

我遇到了这个问题,我的测试失败了,因为验证存在:true无法正常工作。我想知道为什么它没有触发。所以,这是我的代码:

控制器中的简单更新

def update
   person = Person.find_by( params[:id] )

   if person.update( params_person )
      render json: {}, status: :ok
   else
      render json: person.errors, status: :422
   end
end

def params_person
  params.require( :person ).permit( :firstname, :lastname, ... , hobbies: [] )
end

hobbies: []是一系列字符串爱好,例如['playing dota', 'basketball', 'coding', ... ]

人物模型

class Person < ActiveRecord::Base
  ...
  validates :hobbies, presence: true
  ...
end

如果我提出了

的请求
{ ...
  ...
  hobbies: nil/'',
  ...
  ...
}

验证仍然在没有更新爱好的情况下作为数据nil/''

传递

更新

describe '#update' do
    let( :user ) { create( :user ) }

    fcontext 'when params missing' do
      before do
        put :update, id: person.id,
            person: {
              ....,
              ....,
              hobbies: nil 
            }
      end

      it 'respond an error message' do
        expect( response_body ).to include( "Hobbies can't be blank" )
      end

      it { expect( response ).to have_http_status( 422 ) }
    end

1 个答案:

答案 0 :(得分:1)

当您将hobbies: []置于strong_params定义中,然后继续将标量传递给hobbies(您的nil那里)时,强参数不允许这样做,因此,不会在更新中触及。

要验证这一点,请检查该测试中的params_person