2017-03-19 3 views
1

레일에있는 매개 변수에 대한 유효성을 검사하려고합니다. 이이 매개 변수가없는 경우 여기 레일 모델 유효성 검사 - 정의되지 않은 메서드 오류

는 클라이언트에서 보낸 샘플 매개 변수 목록 오류를 던져 레일 싶습니다 이상적으로 User.rb

validates :terms_of_service, presence: true 
    validates :privacy_policy, presence: true 

에 대한 코드입니다

Parameters: {"username"=>"f", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "confirm_success_url"=>"http://localhost:4000", "config_name"=>"default", "registration"=>{"username"=>"f", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "confirm_success_url"=>"http://localhost:4000"}} 

그러나 레일이 아래 오류를 던졌습니다

NoMethodError (undefined method `terms_of_service' for #<User:0x007f16d402e788>): 

실제로 매개 변수를 테스트 할 때 terms_of_service 메서드가 있어야한다고 생각하십니까? 이 비 열 속성 데 도움이

attr_accessor :terms_of_service 

희망하더라도

+0

'terms_of_service'는 Users 테이블의 열에 해당하는 매개 변수이고 ActiveModel은 값을 다시 검색하는 메소드를 만듭니다. 이것은 자동이며 거기에 없으면 열이 거기에 없을 수도 있습니다. 'db/schema.rb'를 게시하십시오. –

+0

아하 나는 거기에 db에 해당 열이 있어야한다는 것을 알지 못한다. 필자는 사용자를 테이블에 저장하기 전에 두 매개 변수 (tos 및 privacy)가 true인지 확인하기를 원했습니다. 컬럼을 원한다면 모델 테이블에서 before_commit 훅을 사용하고 params가 존재하는지 확인해야한다고 가정합니다. – Kannaj

+0

또는 terms_of_service를 attr_accessor로 만들 수 있습니다. –

답변

1

그것이 작동하는 getter 및 setter 방법 및 검증을 설정합니다, attr_accessor 추가!

+0

attr_accessor를 사용하여 params에 액세스 할 수 있습니다.'validates : terms_of_service, acceptance : true'는 전송 된 값 (false, true 또는 key present가 없음)에 관계없이 항상 실패한 것처럼 보입니다. 이것은 다시 테이블에 열이 없다는 것과 관련이 있습니까? – Kannaj

+0

비 컬럼 속성에'attr_accessor'를 추가해야합니다. – RSB