2016-10-21 2 views
1

나는 월과 연도를 따기 위해서 jQuery datepicker을 사용하는 형식을 가지고 있습니다.레일 컨트롤러의 강력한 매개 변수에 '01 - '을 추가하십시오.

$(".date-input").datepicker({ 
        format: 'mm-yyyy', 
        startView: "months", 
        minViewMode: "months" 
       }); 

나는 분명히 전체 형식으로 날짜를 필요로이 날짜를 저장하는 날짜 열이 백엔드에 PostgreSQL의 DB를 저장하는 '-MM-YYYY를 DD'이있다. 내 컨트롤러에 양식을 게시하는 동안,이 내가 건너 온 것입니다 :

Experience.update(date_from: '02-2016')

그래서 date_from 열의 전무 값으로 테이블을 업데이트, 질문은 내가받는이 date_from의 PARAM에 '01-'를 추가 할 수있는 방법입니다 컨트롤러의 POST 요청에서 강력한 매개 변수로.

+1

강력한 매개 변수로는 아무 것도 할 필요가 없다고 생각합니다. 컨트롤러 동작을 저장하기 전에 params 값을 수정할 수 있습니다. – Sajan

+0

백엔드에서 월과 연도를 저장하기를 원한다면 혼란 스러울 때마다 다른 컬럼을 사용하는 것이 좋습니다. 또한 쿼리 할 때 두 로직을 모두 추출하기 위해 로직을 다시 실행할 필요가 없습니다. – Abhinay

+0

은 하나의 레코드에 대한 액션을 수정하는 것이 합리적입니다. 그러나 has_many 중첩 된 속성을 다루고 있습니다. 따라서 여러 개의'Experience' 객체가''experien_attributes "=> {" 0 "=> {"id "=>"1 ","date_from "=>"02-2010 "}, {"1 "=> {"id "=>"2 ","date_from "=>"02- 2011 "}}' – sa77

답변

1

ISO8601 Date 형식 (2016-10-21)을 사용하십시오.

$(".date-input").datepicker({ 
        format: 'yyyy-mm-dd', 
        startView: "months", 
        minViewMode: "months" 
       }); 

당신은 Date.iso8601(str) 또는 DateTime.iso8601(str)로 구문 분석 할 수 있습니다. 이 의미

class Experience < ActiveRecord::Base # or ApplicationRecord 
    def date_from=(val) 
    super(val.is_a?(String) ? Date.iso8601(val) : val) 
    end 
end 

당신이 컨트롤러 수준에서 PARAMS에 대해 걱정할 필요가 없습니다 :

나는이 문제를 처리하는 모델 수준의 세터를 만들 것입니다. 다른 스칼라 값처럼 화이트리스트를 작성하고 모델이 작업을 수행하게하십시오.

저는 그 값을 DATE 유형 (월의 첫날)으로 저장합니다. Thats는 DB 질의를 할 때 최대한의 유연성을 제공하며 레코드를 가져 와서 문자열을 다시 구문 분석 할 필요가 없도록 정상적인 형식을 제공합니다.

+1

예 .. 모델에서하고있는 것이 의미가 있습니다. 모델에서 'before_save' 필터로 시도했습니다. setter 메서드를 지적 해 주셔서 감사합니다. – sa77

0

이것은 강력한 매개 변수와 아무 관련이 없습니다. 강력한 매개 변수를 사용하여 백엔드에서 데이터를 가져올 때 컨트롤러의 정보에 액세스 할 수 있습니다. 이런 식으로 시도해 볼 수 있습니다. -

def create 
    datestr = date_params[:datestr] 
    date = Date.strptime("01-".concat(datestr), "%d-%m-%Y") 
    Experience.update(date_from: date) 
end 

private 

def date_params 
    params.require(:dateinfo).permit(:datestr) 
end