2013-05-19 2 views
2

내 레일스 양식은 사용자에게 이벤트의 시작 날짜를 입력 한 다음 동일한 이벤트의 종료 날짜를 입력하도록합니다. 기본 시작 날짜를 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 %> 

답변

3

당신은 사용자가 validate으로 event 모델 date_end < date_start 이벤트를 저장하는 것을 방지 할 수있다 그들 중 다수가 거기 밖으로 그들은 모두이 범위를 허용, 여기에 예입니다. 사용자는 여전히 필드에서 잘못된 날짜를 선택할 수 있지만 이러한 이벤트는 데이터베이스에 저장할 수 없습니다.

date_end을 잘못 선택하지 못하도록하려면 시상식에서 아래와 같이 JS를 사용해야합니다. 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 
관련 문제