2

我的 Rails 表单要求用户输入事件的开始日期,然后输入同一事件的结束日期。我将默认开始日期设置为 Time.now

用户是否有可能只能选择开始日期或开始日期之后的结束日期?(所以当他们更改开始日期时,结束日期会自动更新)?

我的事件控制器:

def new
    @event = Event.new(params[:event])

    # set date_start field to be today's date
    @event.date_start = Time.now
    @event.date_end = @event.date_start     
end

表格(缩短...)

<%= form_for(@event) do |f| %>  
    <%= f.label :date_start, "Start date" %>
    <%= f.date_select(:date_start, :prompt => { :day => 'Day', :month => 'Month', :year => 'Year' }) %>             

    <%= f.label :time_start, "Start time" %>
    <%= f.time_select :time_start, { :minute_step => 5 } %>                             


    <%= f.label :date_end, "End date" %>
    <%= f.date_select(:date_end, :prompt => { :day => 'Day', :month => 'Month', :year => 'Year' }) %>   
<% end %>
4

2 回答 2

3

您最终将使用 Javascript 来执行此操作。您可能会考虑使用 javascript 数据选择器来提供帮助。那里有很多,它们都允许范围,这里有一个例子:

http://api.jqueryui.com/datepicker/#option-minDate

于 2013-05-19T05:00:54.000 回答
3

您可以使用 阻止用户date_end < date_start在您的event模型中保存事件validate。用户仍然可以在您的字段中选择错误的日期,但他们将无法将此类事件保存到数据库。

如果你想阻止他们甚至选择不正确的date_end,你需要在这里使用 JS,如下面的 Swards 所说。jQuery UI Datepicker 是一个很好的解决方案。

如果validate在模型中对你来说足够了,我认为它应该可以工作(我还没有测试过):

class Event < ActiveRecord::Base
   attr_accessible :date_end, :date_start, ...
   validate :incorrect_date_check, :on => :create
.
.
.
private

def incorrect_date_check
   if date_end < date_start and date_end < Date.today
      errors.add("Incorrect end date!")
   end
end
于 2013-05-19T09:39:21.297 回答