Довгоочікуваний валідатор порівняння з’являється в Rails 7

Коли справа доходить до дат, часто виникає потреба порівнювати їх між собою. Наприклад, візьмемо клас Booking. Зазвичай у бронюванні є дата заїзду та дата виїзду. В більшості випадків, при створенні бронювання, обидві дати повинні бути в майбутньому. І завжди дата виїзду має бути пізнішою за дату заїзду. В іншому випадку, бронювання не мало б сенсу.

До Rails 7 ці валідації не існували, і нам доводилось писати власний метод валідації, як ось цей:

class Booking < ApplicationRecord  
 validates :check_in, presence: true  
 validates :check_out, presence: true  
 validate :check_out_is_greater_than_check_in
private def check_out_is_greater_than_check_in  
 unless check_out.after? check_in  
 errors.add :check_out, "can't be before the check in date"  
 end  
 end  
end

Rails 7 представив ComparisonValidator для ActiveModel, що значно полегшує нашу роботу. Тепер ми можемо зробити ось так:

class Booking < ApplicationRecord  
 validates :check_in, presence: true, comparison: {greater_than: Date.today}  
 validates :check_out, presence: true, comparison: {greater_than: :check_in}  
end

Сьогодні я дізнався про це, і мені б хотілося, щоб це було доступно кілька років тому, коли ми з командою працювали над набором додатків для готельного бізнесу. Дякую, Ruby on Rails, що ти існуєш!

Перекладено з: Long-awaited comparison validator comes to Rails 7

Leave a Reply

Your email address will not be published. Required fields are marked *