gpt4 book ai didi

ruby-on-rails - Rails select - 不需要的自动类型转换

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:12 25 4
gpt4 key购买 nike

DBMS 是 PostgreSQL。

在 Controller 中:

@data = current_user.myitems.all(:select => 'record_date, count(record_date) as value', :group => 'record_date')

在 View 中:

<% @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 字符串中创建别名或在模型中定义别名,但我不想更改模型来为列创建别名,因为我只需要一次别名并且仅用于显示目的。 Controller 的方法具有“case”语句,其中存在多个选择语句每个都有自己的列名。我需要创建别名以获得可靠的 View ,而无需“if”语句。

最佳答案

您可以通过以下方式获取 postgres 查询的类型 ftype .ActiveRecord 在 postgres 适配器(方法#result_as_array) 检查需要转义的列丢弃此信息。

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

tl;dr:给 Ruby 端的东西起别名(在某个地方的模型中)AR不喜欢你正在做的事情。

关于ruby-on-rails - Rails select - 不需要的自动类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10783816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com