Ruby on rails RubyonRails:仅当存在其他属性时才运行自定义验证函数
我希望自定义验证器仅在其使用的属性存在时运行Ruby on rails RubyonRails:仅当存在其他属性时才运行自定义验证函数,ruby-on-rails,ruby,rails-activerecord,rspec-rails,Ruby On Rails,Ruby,Rails Activerecord,Rspec Rails,我希望自定义验证器仅在其使用的属性存在时运行 # these are all dates validates :start_time, presence: true validates :end_time, presence: true validates :deadline_visitor, presence: true validates :deadline_host, presence: true # these validate the above dates validate :va
# these are all dates
validates :start_time, presence: true
validates :end_time, presence: true
validates :deadline_visitor, presence: true
validates :deadline_host, presence: true
# these validate the above dates
validate :validate_all_dates
validate :validate_dates
例如:
def validate_all_dates
if self.start_time > self.end_time
errors.add(:start_time, 'must be before or the same day as end time')
end
end
失败,因为
self.start\u time
和self.end\u time
不存在您可以在验证程序本身中添加变量:
def validate_all_dates
if self.start_time && self.end_time && self.start_time > self.end_time
errors.add(:start_time, 'must be before or the same day as end time')
end
end
您可以将
if
参数添加到validate
方法中,这可以检查所需的条件。该参数可以采用以下两种方式之一:
validates :validate_all_dates, if: Proc.new { |model| model.start_time.presence }
或使用以下方法:
validate :validate_all_dates, if: :dates_present?
def dates_present?
start_time.presence && end_time.presence
end
有关更多详细信息,请参阅本指南: