验证是否存在嵌套属性 returns 错误 "no method :path_base"

Validating presence of nested attributes returns error "no method :path_base"

我有一个接受嵌套属性的模型。总共有 4 个属性,我需要验证一个属性是否存在。我需要验证的特定属性称为 path_base 所以我尝试了

validates_presence_of :path_base

在模型中,但出现错误

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

保存模板记录时。发送的参数如下所示

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"=>""}

所以在 template_responses_attributes 数组中是 path_base 的值所在的位置,并且在 template 数组中就像正常一样(模板是 controller/model正在保存接受嵌套属性的记录)。

如果有人能为此指出正确的方向,我们将不胜感激。

我试过这个,我发现 但是当值为空时它没有 return 错误。

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

每个模型只应负责验证自己的属性 - 如果您想确保嵌套记录有效,请使用 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 选项不是验证机制。相反,它允许您过滤掉不符合条件的嵌套属性,例如您希望过滤掉空行的任务列表应用程序。