在 Rails 中,将字符串从 date_select 转换为日期
In Rails, Convert string from date_select to Date
我有这样的字符串:
{2=>1, 3=>1, 1=>2008}
它是从这样的 select 字段生成的:
<%= user_record.date_select :response, {
order: [:month, :day, :year],
prompt: {
day: 'Select day',
month: 'Select month',
year: 'Select year'
},
start_year: Date.today.year - 12,
end_year: Date.today.year - 110
} %>
并作为字符串存储在数据库中。 (我无法将其更改为日期类型,因为它是用户生成的内容)。
这会导致 2 个问题:
我想在“显示”视图中显示日期的人性化版本。现在它看起来像 {2=>1, 3=>1, 1=>2008}
我想在“编辑视图”表单域中显示日期 select 输入。现在它出错了
undefined method `year' for "{2=>1, 3=>1, 1=>2008}":String
我试过拆分字符串和剥离字符,但是 Ruby 中有更好的解决方案吗?
您可以将客户 setter 和 getter 方法添加到您的模型,以在来自视图的传入哈希和字符串类型数据库列之间进行转换。
类似这样的方法可能有效:
def response
Date.parse(super)
end
def response=(value)
value = Date.new(value[1], value[2], value[3]) if value.is_a?(Hash)
super(value.to_s)
end
我有这样的字符串:
{2=>1, 3=>1, 1=>2008}
它是从这样的 select 字段生成的:
<%= user_record.date_select :response, {
order: [:month, :day, :year],
prompt: {
day: 'Select day',
month: 'Select month',
year: 'Select year'
},
start_year: Date.today.year - 12,
end_year: Date.today.year - 110
} %>
并作为字符串存储在数据库中。 (我无法将其更改为日期类型,因为它是用户生成的内容)。
这会导致 2 个问题: 我想在“显示”视图中显示日期的人性化版本。现在它看起来像 {2=>1, 3=>1, 1=>2008}
我想在“编辑视图”表单域中显示日期 select 输入。现在它出错了
undefined method `year' for "{2=>1, 3=>1, 1=>2008}":String
我试过拆分字符串和剥离字符,但是 Ruby 中有更好的解决方案吗?
您可以将客户 setter 和 getter 方法添加到您的模型,以在来自视图的传入哈希和字符串类型数据库列之间进行转换。
类似这样的方法可能有效:
def response
Date.parse(super)
end
def response=(value)
value = Date.new(value[1], value[2], value[3]) if value.is_a?(Hash)
super(value.to_s)
end