我的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 %>
答案 0 :(得分:3)
您最终将使用Javascript来执行此操作。您可以考虑使用javascript datapicker来提供帮助。那里有很多它们都允许范围,这是一个例子:
答案 1 :(得分: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