gpt4 book ai didi

mysql - 当我使用 find_by_sql 别名时,我感到困惑

转载 作者:行者123 更新时间:2023-11-29 06:38:34 28 4
gpt4 key购买 nike

我正在使用 RoR 和 mysql 数据库。我想将时间戳列转换为字符串,所以我有 SQL:

@books = Book.find_by_sql("select id, name, date_format(borrow_date, '%m/%d/%Y') borrow_date from books")
@books[0].borrow_date => 'Sun, 03 Aug 2014 17:00:00 PDT -07:00'

当我像@books[0].borrow_date 一样输出 borrow_date 时,我得到了未格式化的字符串 'Sun, 03 Aug 2014 17:00:00 PDT -07:00' 这不是预期的。我想要“08/03/2014”

如果我更改与列名不同的别名,我会得到预期的数据字符串。

@books = Book.find_by_sql("select id, name, date_format(borrow_date, '%m/%d/%Y') borrow_date_other from books")
@books[0].borrow_date_other => "08/03/2014"

我不想在 ruby​​ 代码中格式化日期字符串,因为我需要从 oracle 数据库中提取相同的数据,并且只想在使用前转换为字符串。

为什么 RoR 不允许相同的列名和别名?我想念什么吗?提前谢谢你。

最佳答案

您正主动从数据库中加载Books,因此 AREL 尝试将您的选择语句映射到模型。在这种情况下,它将日期映射到 borrow_date 属性并将其转换为 Date 对象。您选择的原始格式将不再相关,因为它已被解析为一个对象,该对象具有自己的日期打印规则。

您的第二个选择有效,因为您的 Book 模型中可能没有该名称的属性,因此无法将其映射到特定类型,因此使用普通 String .

您可以简单地向您的模型添加一个像 formatted_borrow_date 的函数,或者使用帮助器让它使用 ruby​​ 方法格式化 borrow_date 以避免硬编码的 SQL 和日期格式。

关于mysql - 当我使用 find_by_sql 别名时,我感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22956430/

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