Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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 RubyonRails:仅当存在其他属性时才运行自定义验证函数_Ruby On Rails_Ruby_Rails Activerecord_Rspec Rails - Fatal编程技术网

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
有关更多详细信息,请参阅本指南: