짧은 대답은 중요하지 않습니다. 그들은 똑같이 좋습니다.
당신은 이것을 처리 할 수있는 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
덕분에 내가 모델에 그것을 할 것 같은 멋진 답변을 작성하는 시간을 촬영 한합니다. 고마워, – Mike
아무 문제도, 도와 드리겠습니다. – EmFi