Я создал урок бронирования для пользователей, чтобы они могли забронировать своих инструкторов. Текущая проблема, с которой я сталкиваюсь, заключается в следующем: как я могу запретить пользователю бронировать в прошлом? Я использовал DateTime.
Другая проблема, если пользователь устанавливает начальный DateTime, как мне сделать так, чтобы конечный DateTime был меньше начального DateTime?
Я не пытался, может быть, у меня есть предложения. Текущий код показывает, как остановить двойное бронирование.
_form.hmtl.erb
<%= form_for(@lesson) do |f| %>
<div class="field">
<%= f.label :user_id %><br>
<%= f.number_field :user_id %>
</div>
<div class="field">
<%= f.label :lesson_start_date_time %><br>
<%= f.datetime_select :lesson_start_date_time %>
</div>
<div class="field">
<%= f.label :lesson_end_date_time %><br>
<%= f.datetime_select :lesson_end_date_time %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Lesson.rb
class Lesson < ActiveRecord::Base
belongs_to :user
validate :lessons_must_not_overlap
private
def lessons_must_not_overlap
return if self
.class
.where.not(id: id)
.where(user_id: user_id)
.where('lesson_start_date_time < ? AND lesson_end_date_time > ?', lesson_end_date_time, lesson_start_date_time)
.none?
errors.add(:base, 'Overlapping lesson exists')
end
end