2009-09-09 2 views
1

모델에 datetime 열이 있는데 datetime_select 도우미 드롭 다운 메뉴 대신 시간에 대해 별도의 text_fields로이 양식을 표시하려고합니다.레일 Datetime split setter 메서드

나는 어떻게 든 DB에 돌아가려면 날짜를 확인하고 다시 만들어야한다는 것을 알고 있지만 어떻게 확신 할 수는 없다.

가상 속성 getter 및 setter 메서드를 사용해야합니까? 예 ...

def virtual_minute=(minute) 
    ... 
end 

def virtual_hour=(hour) 
    ... 
end 

콜백이 가능합니까?

비트 stucko!

답변

2

ActiveRecord 모델을 사용하는 경우에는 직접 작성하지 않아도됩니다. 다중 매개 변수 속성은 양식을 통해 제출할 수 있습니다. 주문

http://apidock.com/rails/ActionView/Helpers/DateHelper/datetime_select

내부적으로 다양한 매개 변수를 제출받을를하고 제대로 인코딩 할 수 있도록 정보를 입력 : 예를 들어 당신이 행위에서 난 것이 아니니 너무 좋아해요 방법 datetime_select 방법을 확인합니다. 필드 이름을 동일하게 지정하여이 기능을 구축 할 수 있습니다. 원하는 도우미 메서드를 복사하고 ApplicationHelper 모듈에 조정 된 버전을 저장하는 것은 그리 어렵지 않습니다.

값은 여기에 매개 변수로의 라인을 따라 이름이 뭔가를 보여

model_type[attribute(1i)] 
model_type[attribute(2i)] 
model_type[attribute(3i)] 

이들은 필요에 따라 변환, 올바른 순서로 결합하고, 그와 같은 특정 유형의 속성에 대한 생성자에 제출 날짜 시간.

이렇게하면 직접 래퍼 메서드를 만들지 않아도됩니다. 적절한 접근 및 뮤 테이터 방법을 만들 것입니다

class MyModel < ActiveRecord::Base 
    attr_accessor :some_date 
end 

: 어떤 경우에

는 속성을 만들 수있는 쉬운 방법은 같이 attr_accessor 방법을 사용하는 것입니다.

before_validation 트리거를 사용하여 단일 패스에서 값을 재결합하거나 날짜 검색 메소드를 래퍼 (wrapper)로 작성하여 필요에 따라 재구성 할 수 있습니다.

+0

일부 유효한 점을

time_selectdate_select를 참조하십시오. – Cameron

1

가상 속성은 인스턴스 변수에 사용자 데이터를 저장하기 때문에 좋은 IMO입니다. 그런 다음 before_save에서 Time 객체를 생성하여 실제 변수에 할당합니다.

0

I 날짜 (난이 귀하의 질문에 생각) 나는 source code를 살펴 가져다가 :ignore_date 옵션을 찾을 때까지의 시간을 분할하려고했다 :

time_select도 3 입력을 생성하는 것 : ignore_date의 값이 으로 설정되어 있지 않은 한 실제로 년, 월, 일의 숨겨진 태그가 표시됩니다.당신이 설정하면

는 : true로 ignore_date을, 당신은 그렇지 않으면 예외가 발생합니다 양식 내에서 동일한 방법에 date_select이 있어야합니다.

즉, true로 설정하면 날짜와 시간을 나눌 수 있습니다.

은 (는 날짜가 :discard_day, :discard_hour로 선택 사용하는 것도 가능 ...)이