在我的_form.html.erb
中,我有一个日期选择器,它将所选日期以%m/%d/%Y
的格式传递给服务器。示例:"2016年5月30日"。
在create
操作中,当我用传入的params实例化对象时:Rails不知道如何根据日期通过参数传入的格式初始化日期属性,所以它只将日期属性设置为nil。示例:
#blogs_controller.rb
class BlogsController < ApplicationController
def create
@blog = Blog.new(blog_params) # does not understand how to initialize the some_date attribute based on the format it is passed in as, so it initializes the some_date attribute to nil
@blog.save
redirect_to some_path
end
private
def blog_params
params.require(:blog).permit(:some_date)
end
end
这个问题建议创建一个初始化器文件,这样rails在将其传递到参数中时就会理解该格式,但它对我不起作用。它仍在将日期初始化为nil:
#initializers/date_format.rb
Date::DATE_FORMATS[:default] = "%m/%d/%Y"
我也在初始化器文件中尝试过,但出现了一些错误,所以rails甚至无法启动服务器:
ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS[:default] = '%m/%d/%Y'
问题:如何使日期属性以%m/%d/%Y
:rails的格式传递时知道如何正确设置该属性并将对象成功保存到数据库?
我会考虑在模型中使用自定义设置器。
假设您的日期属性命名为published_at
,则setter可能看起来像:
def published_at=(date_string)
write_attribute(:published_at, Date.strptime(date_string, '%m/%d/%Y'))
end