3

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

怎么回事??!!我没有命令将类型转换为字符串!!!

您可能建议不要在 SQL 字符串中创建别名或在模型中定义别名,但我不想更改模型来为列创建别名,因为我只需要一次别名并且仅用于显示目的。控制器的方法具有“ case ”语句,其中存在多个 select 语句每个语句都有自己的列名。我需要制作别名以获得可靠的视图,而不需要“if”语句。

4

1 回答 1

2

您可以通过 ftype. ActiveRecord 在 postgres 适配器(方法 #result_as_array)中使用此信息来检查列需要转义的位置,然后丢弃此信息。

我对进一步数据流的猜测是,它采用列名并使用通过数据库反射获得的数据来确定类型。由于基本类型是String,所以你明白了。因此,使用 rails 期望的列类型或破解 postgres 适配器和 ActiveRecord 以通过ftype.

tl; dr:在 Ruby 方面(在模型中的某处)AR 不喜欢你正在做的事情。

于 2012-05-28T12:06:42.333 回答