【问题标题】:Rails - has_many count on validateRails - has_many 依靠验证
【发布时间】:2016-12-05 15:41:32
【问题描述】:

我正在对保存子模型嵌套属性的父模型进行一些验证。我的父母 has_many 孩子和我的验证检查这些孩子的数量是否大于 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

【问题讨论】:

  • 这回到我对您上一个问题的回答,您的父记录尚未保存,但您想验证与父模型关联的子记录是否在父模型存在之前存在(在上下文中数据库)在鸡蛋问题之前有点鸡。这就是为什么我提出将逻辑移至控制器的建议,尽管我确实看到了一些问题。我期待着这个问题的答案。
  • @CdotStrifeVII 我很欣赏你的回答,我明白你的意思......但我真的不喜欢把那种代码放在控制器上......必须有一些方法可以做到这一点模型,我相信
  • 是的,我明白这一点,我期待听到其他方法。
  • @CdotStrifeVII 将方法计数更改为大小解决了问题......现在,它可以解决问题!
  • 没关系,我明白了。

标签: ruby-on-rails activerecord


【解决方案1】:

您可以指定仅更新验证

validate :check_total_percentual_credito, on: :update

【讨论】:

  • 但我希望它也能在创建时验证。问题是,即使我有我的子模型,在创建时检查它也不会验证,因为这些的计数始终为 0,即使我有一些
  • 如果数据库中甚至不存在父级,您如何让子级与父级关联?
  • 所以,我正在创建带有孩子的父级(嵌套属性 - 茧宝石),但是,在我验证该父级的那一刻,我只想在至少有一个的情况下进行验证这些孩子,明白了吗?
【解决方案2】:

解决了问题:将 .count 更改为 .size 就可以了。希望它可以帮助某人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多