2013-05-19 68 views
2

我的Rails表單要求用戶輸入事件的開始日期,然後輸入同一事件的結束日期。我將默認開始日期設置爲Time.nowRails表單:根據日期集自動設置未來日期

是否有可能讓用戶只能選擇在開始日期之後或之後發生的結束日期? (所以當他們改變開始日期,結束日期自動更新)?

我的活動控制器:

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

回答

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