将“01-”附加到 rails 控制器上的强参数
append '01-' to strong parameter on rails controller
我有一个使用 jQuery datepicker 来选择月份和年份的表格。
$(".date-input").datepicker({
format: 'mm-yyyy',
startView: "months",
minViewMode: "months"
});
我在后端有 postgreSQL 数据库,日期时间列存储这个日期,显然需要完整格式的日期 'dd-mm-yyyy' 来保存它。当 POST 将表单发送到我的控制器时,这就是我遇到的情况:
Experience.update(date_from: '02-2016')
将 table 更新为 date_from 列的零值
所以,问题是我如何将 '01-'
添加到这个 date_from 参数中,我从控制器上的 POST 请求中接收到作为强参数。
这与强参数无关。当您使用强参数从后端获取数据时,您可以访问控制器中的信息。你可以尝试这样的事情 -
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
使用 ISO8601 Date 格式 (2016-10-21)。
$(".date-input").datepicker({
format: 'yyyy-mm-dd',
startView: "months",
minViewMode: "months"
});
你可以用Date.iso8601(str)
或DateTime.iso8601(str)
解析它。
我会创建一个模型级别 setter 来处理这个问题:
class Experience < ActiveRecord::Base # or ApplicationRecord
def date_from=(val)
super( val.is_a?(String) ? Date.iso8601(val) : val )
end
end
这意味着您不必担心控制器级别的参数。只需像任何其他标量值一样将其列入白名单,然后让您的模型完成工作。
我只将值存储为 DATE 类型(作为该月的第一天)。这在涉及到数据库查询时为您提供了最大的灵活性,并且在您提取记录时也为您提供了合理的格式,这样您就不必再次解析字符串。
我有一个使用 jQuery datepicker 来选择月份和年份的表格。
$(".date-input").datepicker({
format: 'mm-yyyy',
startView: "months",
minViewMode: "months"
});
我在后端有 postgreSQL 数据库,日期时间列存储这个日期,显然需要完整格式的日期 'dd-mm-yyyy' 来保存它。当 POST 将表单发送到我的控制器时,这就是我遇到的情况:
Experience.update(date_from: '02-2016')
将 table 更新为 date_from 列的零值
所以,问题是我如何将 '01-'
添加到这个 date_from 参数中,我从控制器上的 POST 请求中接收到作为强参数。
这与强参数无关。当您使用强参数从后端获取数据时,您可以访问控制器中的信息。你可以尝试这样的事情 -
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
使用 ISO8601 Date 格式 (2016-10-21)。
$(".date-input").datepicker({
format: 'yyyy-mm-dd',
startView: "months",
minViewMode: "months"
});
你可以用Date.iso8601(str)
或DateTime.iso8601(str)
解析它。
我会创建一个模型级别 setter 来处理这个问题:
class Experience < ActiveRecord::Base # or ApplicationRecord
def date_from=(val)
super( val.is_a?(String) ? Date.iso8601(val) : val )
end
end
这意味着您不必担心控制器级别的参数。只需像任何其他标量值一样将其列入白名单,然后让您的模型完成工作。
我只将值存储为 DATE 类型(作为该月的第一天)。这在涉及到数据库查询时为您提供了最大的灵活性,并且在您提取记录时也为您提供了合理的格式,这样您就不必再次解析字符串。