DBMS是PostgreSQL。
在控制器中:
@data = current_user.myitems.all(:select => 'record_date, count(record_date) as value', :group => 'record_date')
在视图中:
<% @data.each do |item| -%>
<%= item.record_date.utc.strftime('%Y%m%d') %>
<% end -%>
一切都很好。
但如果我更改日期字段名称:
@data = current_user.myitems.all(:select => 'record_date as recdate, count(record_date) as value', :group => 'record_date')
<% @data.each do |item| -%>
<%= item.recdate.utc.strftime('%Y%m%d') %>
<% end -%>
我收到错误消息:
undefined method `utc' for "2012-02-09 17:03:47":String
WTF ?? !!我没有命令将类型强制转换为字符串!!!
您可能建议不要在SQL字符串中创建别名或在模型中定义别名,但我不想更改模型以为列创建别名,因为我只需要一次别名并仅用于显示目的。 Controller的方法有“ case ”语句,其中多个选择语句存在,每个都有自己的列名。我需要制作别名以获得可靠的视图,而不需要“if”语句。
答案 0 :(得分:2)
您可以通过获取postgres查询的类型
ftype
。
ActiveRecord在postgres适配器中使用此信息(方法
#result_as_array
)检查列需要转义的位置
抛弃这些信息。
我对进一步数据流的猜测是它需要列
命名并使用通过数据库反射获得的数据
确定类型。由于基本类型是String
,你可以得到它。
因此,使用rails期望的列类型或破解postgres适配器
和ActiveRecord通过ftype
询问列类型。
tl; dr:别名Ruby方面的东西(在某个模型中)AR 不喜欢你在做什么。