2017-05-11 6 views
-1

ネストされた属性を受け入れるモデルがあります。 4つの属性があり、その存在を確認する必要があります。私は確認する必要があり、特定の属性はので、私はモデルでネストされた属性の存在を検証すると、エラー "no method:path_base"が返されます。

validates_presence_of :path_base 

を試みたが、テンプレートレコードを保存するとき、私はエラーに

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

を取得していますpath_baseと呼ばれています。 path_baseの値であり、普通の(テンプレートのようなtemplate配列は、そのレコードを保存しているコントローラ/モデルの内側にそれがどこにあるtemplate_responses_attributes配列である内の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"=>""} 

のような外観を送っ取得しますネストされた属性を受け入れます)。

誰かがこれについて正しい方向で私を指すことができれば、それは非常に感謝しています。

私はこれを試しましたが、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オプションは検証メカニズムではありません。むしろ、ネストされた属性が基準を満たさない場合、空の行をフィルタリングしたいタスクリストアプリケーションなどを取り除くことができます。

関連する問題