2016-10-21 42 views
1

我有一個表格,只使用jQuery datepicker來選擇月份和年份。在軌道控制器上附加'01-'強參數

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

我對與日期時間列存儲該日期這顯然需要日期以完整格式後端PostgreSQL的分貝「DD-MM-YYYY」保存它。雖然張貼形式向我的控制器,這是我遇到了:

Experience.update(date_from: '02-2016')與date_from列零值

所以更新表,問題是我怎麼能追加'01-'成我收到此date_from PARAM來自控制器上的POST請求作爲強參數。

+1

我不認爲你需要用強參數做任何事情,你可以在保存控制器動作之前修改參數值。 – Sajan

+0

如果你只是想在月底和年份保存在後端,我建議有一個不同的列,因爲這將避免許多混亂。同樣在查詢時,您不需要再次運行邏輯來提取它們。 – Abhinay

+0

有意義修改單個記錄的操作..但我正在處理has_many嵌套屬性..所以會有多個'Experience'對象嵌套在單個POST請求上,比如'「experiences_attributes」=> {「 0「=> {」id「=>」1「,」date_from「=>」02-2010「},{」1「=> {」id「=>」2「,」date_from「=> 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類型(作爲本月的第一天)。這就爲您在查詢數據庫時提供了最大的靈活性,並且在您提取記錄時還提供了一種理智的格式,以便您不必再次解析字符串。

+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