gpt4 book ai didi

ruby-on-rails - 如何阻止用户预订过去的 DateTime Ruby?

转载 作者:数据小太阳 更新时间:2023-10-29 08:35:25 24 4
gpt4 key购买 nike

我创建了一个预订类(class)供用户预订他们的讲师。我目前面临的问题是,如何阻止用户过去预订?我用过日期时间。

另一个问题是如果用户设置了开始日期时间,如何防止结束日期时间小于开始日期时间?

我没有尝试过,请问有什么建议。当前代码展示了如何停止重复预订。

_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 %>

类(class).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

最佳答案

您永远不应该相信用户输入(因此 html 中的任何更改都是无关紧要的)

您只需要验证来自用户的日期(保持验证尽可能简单,一个验证应该有一个责任)

validates :lesson_end_date_time, :lesson_start_date_time, presence: true
validate :start_date_in_future, :dates_has_positive_length

private

def start_date_in_future
return if lesson_start_date_time.blank?
return if lesson_start_date_time >= Date.current
errors.add(:lesson_start_date_time, :invalid)
end

def dates_has_positive_length
return if lesson_end_date_time.blank? || lesson_start_date_time.blank?
return if lesson_end_date_time >= lesson_start_date_time
errors.add(:lesson_end_date_time, :invalid)
end

关于ruby-on-rails - 如何阻止用户预订过去的 DateTime Ruby?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50174845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com