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

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

До 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 *