[RUBY-ON-RAILS] 레일 방법은 어디 그 DateTime 개체로`datetime_select`에서 변환 데이터?
RUBY-ON-RAILS레일 방법은 어디 그 DateTime 개체로`datetime_select`에서 변환 데이터?
내가 사용하는 경우 <% = f.datetime_select : somedate %> 형태로, 그것은 생성 HTML과 같은 :
<select id="some_date_1i" name="somedate1(1i)"> #year
<select id="some_date_2i" name="somedate1(2i)"> #month
<select id="some_date_3i" name="somedate1(3i)"> #day
<select id="some_date_4i" name="somedate1(4i)"> #hour
<select id="some_date_5i" name="somedate1(5i)"> #minute
그 양식이 제출되면 somedate1 (
{"date1(1i)"=>"2011", "date1(2i)"=>"2", "date1(3i)"=>"21", "date1(4i)"=>"19", "date1(5i)"=>"25"}
어떻게 DateTime 개체로 그것을 변환 할 수 있습니까?
나는이 작업을 수행하는 내 자신의 방법을 쓸 수 있지만 레일부터 이미 내가 나를 위해 그것을 할 그 레일 메서드를 호출 할 수 있다면, 내가 궁금 변환을 할 수 있을까?
나는 어디에서 그 방법을 찾아하는 모른다.
내가 궁극적으로 해결하기 위해 노력하고있어 "POST 매개 변수에 날짜 / 시간을 처리하는 방법?" 이 문제는 다른 문제에 대한 해결책을 찾기 위해 노력하는 첫 번째 단계입니다.
해결법
-
==============================
1.그 코드 경로의 시작은 바로 여기에 대해 것 같다 :
그 코드 경로의 시작은 바로 여기에 대해 것 같다 :
https://github.com/rails/rails/blob/d90b4e2/activerecord/lib/active_record/base.rb#L1811
그것은 찾기 힘들했다! 나는 이것이 당신이 원하는 것을 찾는 도움이되기를 바랍니다
-
==============================
2.당신이 당신의 모델을 저장할 때이 변환은 액티브 내에서 발생합니다.
당신이 당신의 모델을 저장할 때이 변환은 액티브 내에서 발생합니다.
이 같은으로 해결 할 수 :
somedate = DateTime.new(params["date1(1i)"].to_i, params["date1(2i)"].to_i, params["date1(3i)"].to_i, params["date1(4i)"].to_i, params["date1(5i)"].to_i)
날짜 시간 :: 새로운 날짜 시간의 별칭 : 시민 (루비 문서)입니다
-
==============================
3.안녕 나는하여와 ApplicationController에 다음을 추가하고,이 변환을 수행합니다.
안녕 나는하여와 ApplicationController에 다음을 추가하고,이 변환을 수행합니다.
#extract a datetime object from params, useful for receiving datetime_select attributes #out of any activemodel def parse_datetime_params params, label, utc_or_local = :local begin year = params[(label.to_s + '(1i)').to_sym].to_i month = params[(label.to_s + '(2i)').to_sym].to_i mday = params[(label.to_s + '(3i)').to_sym].to_i hour = (params[(label.to_s + '(4i)').to_sym] || 0).to_i minute = (params[(label.to_s + '(5i)').to_sym] || 0).to_i second = (params[(label.to_s + '(6i)').to_sym] || 0).to_i return DateTime.civil_from_format(utc_or_local,year,month,mday,hour,minute,second) rescue => e return nil end end
-
==============================
4.다른 사람이 여기 DateTime.new를 사용하는 솔루션을 제공,하지만 PostgreSQL을에서 작동하지 않습니다. 즉, 그대로는 형태로 삽입으로 즉, 레코드를 저장합니다, 당신은 "시간대없이 타임 스탬프"를 사용하는 경우에 따라서는, UTC 시간으로 데이터베이스에 저장하지 않습니다. 나는이 일을 알아 내려고 시간을 보냈다 및 솔루션 DateTime.new보다는 Time.new를 사용하는 것이 었습니다 :
다른 사람이 여기 DateTime.new를 사용하는 솔루션을 제공,하지만 PostgreSQL을에서 작동하지 않습니다. 즉, 그대로는 형태로 삽입으로 즉, 레코드를 저장합니다, 당신은 "시간대없이 타임 스탬프"를 사용하는 경우에 따라서는, UTC 시간으로 데이터베이스에 저장하지 않습니다. 나는이 일을 알아 내려고 시간을 보냈다 및 솔루션 DateTime.new보다는 Time.new를 사용하는 것이 었습니다 :
datetime = Time.new(params["fuel_date(1i)"].to_i, params["fuel_date(2i)"].to_i, params["fuel_date(3i)"].to_i, params["fuel_date(4i)"].to_i, params["fuel_date(5i)"].to_i)
-
==============================
5.매우 비슷한 일을했고,이 방법을 사용하여 결국 :
매우 비슷한 일을했고,이 방법을 사용하여 결국 :
def time_value(hash, field) Time.zone.local(*(1..5).map { |i| hash["#{field}(#{i}i)"] }) end time = time_value(params, 'start_time')
참조 : TimeZone.local를
-
==============================
6.나는 내가 내 컨트롤러에 PARAMS을 허용 추가하는 것을 잊었다 밝혀졌다 4. 레일이 문제를 가지고 있었다 :
나는 내가 내 컨트롤러에 PARAMS을 허용 추가하는 것을 잊었다 밝혀졌다 4. 레일이 문제를 가지고 있었다 :
def event_params params.require(:event).permit(....., :start_time, :end_time,...) end
-
==============================
7.이 메소드 I 사용 - 그것은 새로운 해시로 삭제 된 키를 반환합니다.
이 메소드 I 사용 - 그것은 새로운 해시로 삭제 된 키를 반환합니다.
class Hash def delete_by_keys(*keys) keys.each_with_object({}) { |k, h| h[k] = delete(k) if include? k } end end
from https://stackoverflow.com/questions/5073756/where-is-the-rails-method-that-converts-data-from-datetime-select-into-a-datet by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 왜 액세스 액티브에 사용 "자기"/ 모델 속성 레일? (0) | 2020.02.20 |
---|---|
[RUBY-ON-RAILS] 배열의 PostgreSQL의 경우 모든 (0) | 2020.02.20 |
[RUBY-ON-RAILS] URL에 표시 3 UTF-8 쿼리 문자열은 레일? (0) | 2020.02.20 |
[RUBY-ON-RAILS] 레이크 dB 대 마이그레이션 : 마이그레이션 DB 레일 (0) | 2020.02.20 |
[RUBY-ON-RAILS] 어떻게 MySQL의 데이터베이스에 중복 레코드를 삭제하려면? (0) | 2020.02.20 |