Ruby on Rails:运行 仅当存在其他属性时自定义验证函数
Ruby on Rails: Running custom validation function only when other properties are present
我希望我的自定义验证器仅在其使用的属性存在时 运行。
# 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_time
和 self.end_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
你可以在validate
方法中添加一个if
参数,这样可以检查需要的条件。该参数可以是一个过程:
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
查看本指南了解更多详情:Conditional Validation
我希望我的自定义验证器仅在其使用的属性存在时 运行。
# 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_time
和 self.end_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
你可以在validate
方法中添加一个if
参数,这样可以检查需要的条件。该参数可以是一个过程:
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
查看本指南了解更多详情:Conditional Validation