我注意到一些奇怪的事情。因为我有一个具有用户模型的 Rails 应用程序。
用户拥有一个实验室
实验室属于用户。
用户有两个属性,用户名和年龄。
创建时必须输入用户名,更新时必须输入年龄。
我正在使用
fields_for
和 accepts_nested_attributes_for
以单一形式创建父记录和子记录。
Lab 有四个属性:
:first_reading, :second_reading
create
均强制,:third_reading, :forth_reading
'更新' 均强制。
创建对象时,我的所有验证都在创建时运行,用户的用户名以及实验室的first_reading和second_reading。
编辑记录时,当我的年龄为空时,验证运行完美,但是当我的实验室的第三次和第四次读数为空时,提交了记录。为什么会这样呢?对于空白时的用户年龄,验证运行,而对于实验室的第三次和第四次读数空白,验证不运行。
有什么办法解决这个问题吗?
这是我的 github 存储库链接。您可以从这里浏览该结构。 https://github.com/muhammadans414414/Demo
我不完全确定我是否正确理解您的数据模型。但从您的仓库中我们得到以下内容:
class Lab < ApplicationRecord
belongs_to :user
validates :igg_first_reading, presence: {message: "please select first igg reading"}, on: :create
validates :igm_first_reading, presence: {message: "please select first igm reading"}, on: :create
validates :igg_second_reading, presence: {message: "please select second igg reading"}, on: :update
validates :igm_second_reading, presence: {message: "please select second igm reading"}, on: :update
end
我不知道“第三次和第四次”阅读是否指的是“igg_second_reading”和“igm_second_reading” - 但您可以看到,“on”子句不同,因此验证仅在更新时运行,而不是在创建时运行记录一下。
这同样适用于您的用户模型:
class User < ApplicationRecord
validates :username, presence: true, on: :create
validates :age, presence: true, on: :update
...
end
所以我建议您检查一下,您的“on”子句是否真的符合您的业务需求。