gpt4 book ai didi

mysql - 无法访问 Rails 4.1 中的 SQL 列别名

转载 作者:行者123 更新时间:2023-11-30 22:31:52 27 4
gpt4 key购买 nike

将我的 Rails 应用程序从 3.2 升级到 4.1.13 后,我的一个查询似乎没有使别名列可用于 ActiveRecord(我认为)。如果我运行 .to_sql 并使用该 SQL 进行查询,我可以清楚地看到正在返回别名列,但是当我像以前一样尝试访问它们时,我得到了 undefined method 错误.

我不确定如何解决这个问题。

查询是根据 Ransack 搜索和一些 Squeel 连接构建的。

search_result = search.result.in_current_club_type.
joins{role.outer}.joins{contact.outer}.for_current_or_last_year.with_fellowship.
select(<<-SQL
people.id, people.last_name, people.first_name, people.parent_only, clubs.name AS club_name,
roles.name AS role_name, tlt, master_guide, pla, grade, people.type, people.email,
contacts.primary_phone AS phone
SQL
)

我需要访问的别名是 role_nameclub_namephone。我在那之后放置了一个 binding.pry 并尝试 search_result.first.role_name 并且返回的错误是

NoMethodError: undefined method `role_name' for #<Member:0x007fa8bcf121d0>

我可以将它们变成实例方法,但如果可能的话,我希望能够继续使用现有的做事方式。

感谢您的指导。

最佳答案

好吧,我不知道确切原因,但似乎搜索是从需要使用 Squeel 语法重写的范围构建的。然后一切正常连接,我可以调用别名列。

旧范围

scope :unapproved, -> { joins(approvals).where('approvals.approved IS NULL OR approvals.approved = ?', false) }

新范围

scope :unapproved, -> { joins{approvals}.where{(approvals.approved == nil) | (approvals.approved == false)} }

关于mysql - 无法访问 Rails 4.1 中的 SQL 列别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33677239/

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