使用以"%m/%d/%Y"格式传递的日期属性创建 rails 对象



在我的_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

最新更新