我有三个型号model1,model12和mode2。 Model1有很多模型2到模型12。
我必须验证model2到model12的存在。
当我尝试保存model1 rails的编辑记录时,保存没有model2的记录。验证仅在模型1中已存在的DB条目没有model2信息时失败。
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时它会失败。
如果我的问题不明确,请告诉我。
答案 0 :(得分:1)
我找到了解决问题的方法。
我在复选框中有model2s。当我取消选中所有已检查的model2并提交表单时。因为我使用的是嵌套属性,所以它标记了旧的未经检查的model2s以进行销毁,并且在此之前运行保存和验证后会发生此破坏。
所以rails发现了一些模型2,因此没有验证错误。
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