这是使用带有Rails和ActiveRecord 5.1的Ruby 2.3.3 。
以此查询为例。
Quizz
.select('questions.id as qID, questions.text as qTEXT, answers.id as aID, answers.text as aTEXT')
.joins(:questions => :answers)
.where(id: quizz_id)
在针对 SQLite 数据库进行测试时,在开发环境中,它会正确返回包含我选择的字段的哈希集合。
在针对 Postgres 数据库进行测试时,在生产环境中,它错误地返回仅包含字段id
的 Quizz 对象的集合为Nil
。
需要注意的一些重要事项:
ActiveRecord::Base.connection.select_all(query.to_sql)
,结果会按预期结束。我已经搜索过,找不到它的行为方式不同的原因。
解决方案编辑:
我无法回答这个问题,因为它被标记为重复。事实证明,根据这个link,Postgres将自动小写任何未引用的字段。所以对Postgres的正确查询是:
Quizz
.select('questions.id as "qID", questions.text as "qTEXT", answers.id as "aID", answers.text as "aTEXT"')
.joins(:questions => :answers)
.where(id: quizz_id)
另外,正如@muisshort在评论部分中指出的那样,inspect不会显示那些字段,但它们就在那里。