无法在 Rails 4.1 中访问 SQL 列别名

Can't access SQL column aliases in Rails 4.1

将我的 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)} }