2017-05-11 17 views
-1

중첩 된 특성을 허용하는 모델이 있습니다. 4 가지 속성이 모두 있으며 하나의 속성을 확인해야합니다. 내가 path_base이라고를 위해 확인해야합니다 특정 속성은 그래서 모델에서 중첩 된 특성의 존재를 확인하면 "no method : path_base"오류가 반환됩니다.

validates_presence_of :path_base 

을 시도했지만 템플릿 기록을 저장할 때 나는 오류를

undefined method `path_base' for #<Template:0x007fa279146360> 

을 얻고있다. PARAMS이

Parameters: {"utf8"=>"✓", "authenticity_token"=>"ZO+Pi3/6WwNk0H3cFhgDbRywjrAOv2RnZ7olIsenND0=", "already_saved"=>"false", "update_pages"=>"false", 
"template"=>{"type"=>"singleton", "name"=>"test", 
"template_responses_attributes"=>{"0"=>{"path_base"=>"", "liquid_code"=>"test", "indexable"=>"1", "content_type"=>"text/html"}, "1"=>{"path_base"=>"", "liquid_code"=>"", "indexable"=>"1", "content_type"=>"text/html"}}, 
"template_fields_json"=>"[\r\n\r\n]"}, "button"=>""} 

같이 보내지고 그래서 path_base의 값이, 그리고 그 (템플릿이 기록을 저장 컨트롤러/모델 그냥 정상처럼 template 배열 안에 어디 template_responses_attributes 배열입니다 내부에 그 중첩 된 속성을 허용).

누군가가 올바른 방향으로 나를 가리킬 수 있다면 크게 감사하겠습니다.

내가 이것을 시도했는데, here을 발견했지만 값이 비어 있으면 오류를 반환하지 않았습니다.

reject_if: proc { |attributes| attributes['path_base'].blank? } 

답변

1

각 모델은 고유의 특성을 검증하기위한 책임을 져야한다 - 당신이 중첩 기록이 유효 사용 validates_associated 있는지 확인하십시오.

class Template < ApplicationRecord 
    has_many :responses 
    accepts_nested_attributes_for :responses 

    # This validates all the associated records 
    validates_associated :responses 
end 

class Response < ApplicationRecord 
    validates_presence_of :path_base 
    # ... 
end 

reject_if 옵션은 유효성 확인 메커니즘이 아닙니다. 오히려 중첩 된 속성이 기준을 충족시키지 못하면 필터 할 수 있습니다. 예를 들어 빈 행을 필터링하려는 작업 목록 응용 프로그램을 예로들 수 있습니다.