rails 表示嵌套模型的字段在不存在时为空的问题
Issue with rails saying a nested model's field is blank when it is not
我在获取经过验证的嵌套模型以正确保存时遇到问题。这似乎只发生在这个模型中的一个字段上。
我有两个模特,一个是兽医
class Veterinarian < ApplicationRecord
has_many :licenses
accepts_nested_attributes_for :licenses, allow_destroy: true, reject_if: :all_blank
end
和许可证
class License < ApplicationRecord
belongs_to :veterinarian
validates :number, :expiration_date, presence: true
end
我的控制器操作除了用 vet_params
调用 Veterinarian.create(vet_params)
外什么都不做,看起来像这样呈现为 JSON。
{
"zip_code":"",
"title":"",
"bio":"",
"photo":"",
"licenses_attributes":{
"0":{
"number":"6436436446",
"expiration_date":"09/06/2018",
"_destroy":"false"
},
"1":{
"number":"Test Number",
"expiration_date":"09/16/2020",
"_destroy":"false"
},
"2":{
"number":"test 2",
"expiration_date":"09/30/2016",
"_destroy":"false"
}
}
}
正确的参数被发送到 'create()',但是对于嵌套的许可证,它总是抛出一个错误,说 expiration_date 不能为空。这只会发生在第一个许可证之后的其他许可证上。第一个验证得很好。
我不知道是什么原因造成的。我以前从未见过这种情况。任何想法将不胜感激。
这是 Rails 5 顺便说一句。
您的到期日期无效。
"1":{
"number":"Test Number",
"expiration_date":"09/16/2020",
"_destroy":"false"
},
在rails控制台尝试,
date = Date.parse("09/16/2020")
你会得到错误
ArgumentError: invalid date
from (irb):20:in `parse'
from (irb):20
但是在保存记录时,rails 跳过了这个错误并且 expiration_date 被设置为 nil,并且随后的验证引发了错误,指出过期日期不能为空。
validates :number, :expiration_date, presence: true
将到期日期从“09/16/2020”更改为“09/09/2020”。您的代码可以正常工作。
我在获取经过验证的嵌套模型以正确保存时遇到问题。这似乎只发生在这个模型中的一个字段上。
我有两个模特,一个是兽医
class Veterinarian < ApplicationRecord
has_many :licenses
accepts_nested_attributes_for :licenses, allow_destroy: true, reject_if: :all_blank
end
和许可证
class License < ApplicationRecord
belongs_to :veterinarian
validates :number, :expiration_date, presence: true
end
我的控制器操作除了用 vet_params
调用 Veterinarian.create(vet_params)
外什么都不做,看起来像这样呈现为 JSON。
{
"zip_code":"",
"title":"",
"bio":"",
"photo":"",
"licenses_attributes":{
"0":{
"number":"6436436446",
"expiration_date":"09/06/2018",
"_destroy":"false"
},
"1":{
"number":"Test Number",
"expiration_date":"09/16/2020",
"_destroy":"false"
},
"2":{
"number":"test 2",
"expiration_date":"09/30/2016",
"_destroy":"false"
}
}
}
正确的参数被发送到 'create()',但是对于嵌套的许可证,它总是抛出一个错误,说 expiration_date 不能为空。这只会发生在第一个许可证之后的其他许可证上。第一个验证得很好。
我不知道是什么原因造成的。我以前从未见过这种情况。任何想法将不胜感激。
这是 Rails 5 顺便说一句。
您的到期日期无效。
"1":{
"number":"Test Number",
"expiration_date":"09/16/2020",
"_destroy":"false"
},
在rails控制台尝试,
date = Date.parse("09/16/2020")
你会得到错误
ArgumentError: invalid date
from (irb):20:in `parse'
from (irb):20
但是在保存记录时,rails 跳过了这个错误并且 expiration_date 被设置为 nil,并且随后的验证引发了错误,指出过期日期不能为空。
validates :number, :expiration_date, presence: true
将到期日期从“09/16/2020”更改为“09/09/2020”。您的代码可以正常工作。