Rails - 验证另一个模型中的字段

时间:2011-02-24 07:33:28

标签: ruby-on-rails-3

当且仅当相关模型中的另一个字段具有特定值时,需要一些帮助来确定如何验证一个字段。例如:

//我的模特

class Course < ActiveRecord::Base
  has_many :locations, :dependent => :destroy
  accepts_nested_attributes_for :locations
end

class Location < ActiveRecord::Base
  belongs_to  :course
end

课程可以有许多位置(州,市等)以及start_date。我希望有类似的东西:“只允许location.start_date为空白,如果是course.format =='DVD'”

在我的位置模型中,我尝试了类似的内容:

validates_presence_of   :start_date,
                        :message => "Start Date can't be blank",
                        :allow_blank => false,
                        :if => Proc.new { |course| self.course.format != 'DVD' }

然后,当我使用它时,我得到: 私有方法'format'调用nil:NilClass

不确定我是否在正确的轨道上。

谢谢!

1 个答案:

答案 0 :(得分:0)

传递给Proc子句的if作为参数传递给正在验证的当前对象实例的块。那么,你|course|所拥有的就是|location|。尝试以下内容,看看它是否符合您的要求:

validates_presence_of   :start_date,
                        :message => "Start Date can't be blank",
                        :allow_blank => false,
                        :if => Proc.new { |location| location.course.format != 'DVD' }