当且仅当相关模型中的另一个字段具有特定值时,需要一些帮助来确定如何验证一个字段。例如:
//我的模特
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
不确定我是否在正确的轨道上。
谢谢!
答案 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' }