【问题标题】:get parent values in child model在子模型中获取父值
【发布时间】:2011-07-12 22:08:51
【问题描述】:

我有一个名为 RsvpRegistrations 的模型

belongs_to :rsvp

我需要在我的验证中使用来自父“rsvp”对象的值,例如

validates_presence_of :phone if self.rsvp.phone 

(Rsvp.phone 是布尔值)

但这不起作用。我得到的错误是未定义的方法“rsvp”。如何访问父对象及其值?

一旦我得到它的工作,我还有其他类似的验证要运行,所以我想我需要一次抓住父“rsvp”,然后在我的其他验证中引用它。

提前致谢。

【问题讨论】:

  • 你是什么意思它不起作用。你有错误日志吗?
  • 你检查了accepts_nested_attributes_for 吗?看起来你可能想要它的情况

标签: ruby-on-rails model-associations


【解决方案1】:
validates_presence_of :phone, :if => Proc.new { |obj| obj.rsvp.phone? }

更多选项here

【讨论】:

  • 这成功了!不能感谢你。还有一个问题:我需要在这个模型中引用父对象大约 8 次。有没有更好的方法将父级存储在某种实例变量中并在我的每个验证中引用它,或者只是重复上面的代码并进行各种调整就可以了吗?
  • 重复这段代码就好了。 rsvp 对象只会在您第一次访问时从数据库中检索。
【解决方案2】:

如果您有多个都引用 RSVP 的验证,则创建自定义验证方法可能更有效:

# app/models/rsvp_registration.rb
def RsvpRegistration
  def validate
    rsvp = self.rsvp
    errors.add(:rsvp, 'Phone is missing') unless rsvp.phone?
    errors.add(:rsvp, 'Other messages') if condition
  end
end

【讨论】:

    猜你喜欢
    • 2022-08-02
    • 2016-06-26
    • 1970-01-01
    • 2011-02-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多