验证是否存在嵌套属性 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
选项不是验证机制。相反,它允许您过滤掉不符合条件的嵌套属性,例如您希望过滤掉空行的任务列表应用程序。
我有一个接受嵌套属性的模型。总共有 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正在保存接受嵌套属性的记录)。
如果有人能为此指出正确的方向,我们将不胜感激。
我试过这个,我发现
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
选项不是验证机制。相反,它允许您过滤掉不符合条件的嵌套属性,例如您希望过滤掉空行的任务列表应用程序。