Ruby on rails Rails-有很多依赖于验证

Ruby on rails Rails-有很多依赖于验证,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我正在对一个父模型进行一些验证,这个父模型保存了一个子模型的嵌套属性。我的父母有很多孩子,我的验证检查这些孩子的数量是否大于0。它可以很好地进行编辑,因为子项已经创建并保存在db上,但是对于新记录,它失败了,因为计数总是返回0。我怎样才能解决这个问题 我的父模型代码如下所示: class ArrendamentoContrato < ApplicationRecord has_many :arrendamento_contrato_unidades, dependent: :de

我正在对一个父模型进行一些验证,这个父模型保存了一个子模型的嵌套属性。我的父母有很多孩子,我的验证检查这些孩子的数量是否大于0。它可以很好地进行编辑,因为子项已经创建并保存在db上,但是对于新记录,它失败了,因为计数总是返回0。我怎样才能解决这个问题

我的父模型代码如下所示:

class ArrendamentoContrato < ApplicationRecord



  has_many :arrendamento_contrato_unidades, dependent: :destroy

  validate :check_total_percentual_credito

  def check_total_percentual_credito
    if arrendamento_contrato_unidades.count > 0 && arrendamento_contrato_unidades.sum(&:percentual_credito).to_f != 100.0
      self.errors.add :percentual_credito, I18n.t("errors.messages.percentual_credito")
    end
  end
end
class-ArrendamentoContrato0&&arrendamento_contracto_unidades.sum(&:percentual_credito).to_f!=100
self.errors.add:percentual_credito,I18n.t(“errors.messages.percentual_credito”)
结束
结束
结束

您只能为更新指定验证

validate :check_total_percentual_credito, on: :update

解决了问题:改变。计算。大小成功了。希望它能帮助别人

这又回到了我对上一个问题的回答,您的父记录尚未保存,但您希望验证与父模型相关联的子记录是否在父模型存在之前存在(在数据库上下文中),它有点像鸡蛋问题之前的鸡。这就是为什么我建议将逻辑移到控制器上,尽管我确实看到了一些问题。我期待着这个问题的答案。@CdotStrifeVII我很感激你的回答,我明白了你的意思。。。但我真的不喜欢在控制器上放那种代码。。。在模型中一定有办法做到这一点,我相信是的,我理解这一点,我期待听到其他方法。@CdotStrifeVII更改大小的方法计数解决了问题。。。现在,它成功了!没关系,我得到了。但我希望它也能在create上验证。问题是,即使我有我的子模型,在创建检查时它也不会验证,因为这些模型的计数总是为0,即使我有,如果父模型在数据库中还不存在,你能让子模型与父模型相关联吗?因此,我创建了带有子模型的父模型(嵌套属性-cocoon gem),但是,在我验证父母的那一刻,我只想在至少有一个孩子的情况下进行验证,明白吗?