Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 获取子模型中的父值_Ruby On Rails_Model Associations - Fatal编程技术网

Ruby on rails 获取子模型中的父值

Ruby on rails 获取子模型中的父值,ruby-on-rails,model-associations,Ruby On Rails,Model Associations,我有一个叫RsvpRegistrations的模型 belongs_to :rsvp 我需要在验证中使用来自父“rsvp”对象的值,例如 validates_presence_of :phone if self.rsvp.phone (Rsvp.phone是布尔值) 但这不起作用。我得到的错误是未定义的方法“rsvp”。如何访问父对象及其值 一旦我让它工作起来,我还有其他类似的验证要运行,所以我想我需要抓住父“rsvp”一次,然后在我的其他验证中引用它 提前谢谢 validates_pre

我有一个叫RsvpRegistrations的模型

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

validates_presence_of :phone if self.rsvp.phone 
(Rsvp.phone是布尔值)

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

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

提前谢谢

validates_presence_of :phone, :if => Proc.new { |obj| obj.rsvp.phone? }

更多选项

如果您有多个验证都引用了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

你说它不起作用是什么意思。是否有错误日志?是否签出了接受\u嵌套\u属性\u?看起来你可能想让它起作用!非常感谢你。还有一个问题:在这个模型中,我需要引用父对象大约8次。是否有更好的方法将父对象存储在某种实例变量中,并在每次验证中引用它,或者只是重复上面的代码并进行各种调整就可以了?重复这段代码也可以。
rsvp
对象将仅在您第一次访问它时从数据库中检索。