gpt4 book ai didi

ruby - Rails validates_presence_of 正在检查保存的记录而不是编辑的记录

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:52 27 4
gpt4 key购买 nike

我有三个模型 model1、model12 和 mode2。模型 1 有很多模型 2 到模型 12。

我必须通过 model12 验证 model2 的存在。

当我尝试保存 model1 的编辑记录时,rails 正在保存没有 model2 的记录。只有当模型 1 中已经存在的数据库条目没有模型 2 信息时,验证才会失败。

class model1 < ActiveRecord::Base
has_many :model12, :dependent => :destroy, :include => [:model]
has_many :model2, :through => :model12, :uniq => true

validates_presence_of :model12, :message => "must be present"

我试过了

  validates_presence_of :model2, :message => "must be present"

这也行不通。

我想在我的例子中,rails 正在检查保存的记录而不是未保存的记录。这就是为什么当已经保存的记录有 model2 而未保存的记录没有 model2 验证不会失败的原因。但是当保存的记录没有 model2 并且未保存的记录也没有 model2 时它会失败。

如果我的问题不清楚,请告诉我。

最佳答案

我找到了解决问题的方法。

我的复选框中有 model2s。当我取消选中所有选中的 model2 并提交表单时。因为我使用的是嵌套属性,所以它标记了旧的未经检查的 model2 以进行销毁,并且这种销毁将在保存和验证运行之后发生。

因此 Rails 发现存在一些 model2,因此没有验证错误。

class model1 < ActiveRecord::Base

has_many :model12, :dependent => :destroy, :include => [:model]
has_many :model2, :through => :model12, :uniq => true

accepts_nested_attributes_for :model2,
:allow_destroy => true,
:reject_if => proc {|m| m.blank? }

validate :must_have_one_model2

def must_have_one_model2
errors.add(:model2s, 'must have one model2') if model12s_count_valid?
end

def model12s_count_valid?
model12s.reject(&:marked_for_destruction?).count >= 1
end
end

感谢 les hill 的帖子 validation presence with nested models

关于ruby - Rails validates_presence_of 正在检查保存的记录而不是编辑的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16209467/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com