2009-11-16 4 views
1

내가 time_select() 도우미 + jQuery를 UI 날짜 선택기

은 내가 한 날짜에 time_Select과 날짜 선택기의 값을 병합 할 양식을 제출할 때 수 있기를 원하는하는 time_select와 JQuery와 날짜 선택기와 형태가 내 ActiveRecord 모델의 ...

우아한 방법이 있습니까? 내가 그것을 클라이언트 나 서버 측을해야 ... 나는 그렇게 간단 내 행동을 계속하고 싶습니다 :

def create 
    @drive = Drive.new(params[:drive])) 
    if @drive.save 
     flash[:notice] = 'Drive created !' 
     render :action => :show 
    else 
     render :action => :new 
    end 
    end 

나도 몰라 ... 난 모델의 가상 속성과 그것을해야 병합 before_save 또는 어쩌면 자바 스크립트에서 양식을 제출하거나 어쩌면 당신은 더 나은 생각을 가지고 ... 당신은 어떻게 생각하니 ??

감사합니다.

마이크.

답변

3

짧은 대답은 중요하지 않습니다. 그들은 똑같이 좋습니다.

당신은 이것을 처리 할 수있는 3 곳의 합리적인 곳이 있습니다.

  1. 제출시 자바 스크립트가있는 클라이언트.
  2. 컨트롤러에서.
  3. 모델에서.

사용하는 방법에 관계없이 모든 매개 변수가 문자열로 수신되므로 컨트롤러/모델에서 데이터를 처리해야합니다.

모델 및 컨트롤러 변형에서 추가 결정을 내릴 수 있습니다. 6 필드의 DateTime을 함께 사용하거나 한 쌍의 문자열 (하나는 값을 포함하고 하나는 strptime 형식을 포함합니다.)

DateTime의 생성자 메소드에는 datetime 객체를 작성하는 데 거의 동일한 작업이 필요하다는 것을 알고 있습니다. datetime 문자열과 형식 문자열에서 개체를 빌드 할 때와 마찬가지로 별도의 필드 집합입니다. 실제로 DateTime 객체를 작성하는 방법은 중요하지 않습니다.

그래서 모든 것이 개인적인 취향에 달려 있습니다.

개인적으로 나는이 논리가 모델에 속한다고 믿습니다. Javascript가 비활성화 되어도 내 코드가 손상되지 않도록하기 때문에 javavascript에 넣지 않을 것입니다. 컨트롤러는 똑같이 잘 맞습니다. 그러나이 논리를 모델에 적용하면 날짜와 유효성 검사를보다 강력하게 처리 할 수 ​​있습니다. 또한 strptime 생성자가 7 인수의 시민 생성자보다 훨씬 읽기 쉽다고 생각합니다. 하지만 시민 생성자는 형식 시간/분/초가 정확히 2 자리 길이인지 확인하지 않아도됩니다. 어느 쪽이든 나는 년, 월, 일,시, 분 및 두 번째 오프셋을 별도의 attr_accessors 필드로 전달하므로 필요한 경우 처리 할 수 ​​있도록 해당 데이터를 사용할 수 있습니다.

예제 코드

class Drive < ActiveRecord::Base 
    ... 
    attr_accessor :year, :month, :day, :hour, :minute, :second, :locale_offset 

    before_validation :build_date 
    validates :future_time 

    def build_date 
    begin 
     self.date = DateTime.civil(year.to_, month.to_i, day.to_i, 
        hour.to_i, minute.to_i, second.to_i, user.locale_offset) 
    rescue 
     errors.add(:date, "Invalid date") 
     return false 
    end 
    end 

    def future_time 
    unless date > DateTime.now 
     errors.add(:date, "Date occurs in the past.") 
    end 
    end 
end 
+0

덕분에 내가 모델에 그것을 할 것 같은 멋진 답변을 작성하는 시간을 촬영 한합니다. 고마워, – Mike

+0

아무 문제도, 도와 드리겠습니다. – EmFi