使用带有includes()和where()的select()时使用activerecord来检索虚拟属性

时间:2014-05-17 06:38:57

标签: sql ruby-on-rails ruby activerecord

我在进行数据库查询时无法检索虚拟属性。以下按预期工作:

s = Story.includes(:scenes).select("stories.*, 3 as testval")
s.first.title
=> "My Story"
s.first.testval
=> 3

但是当我输入where子句时,它就会停止工作:

s = Story.includes(:scenes).select("stories.*, 3 as testval").where("scenes.id < ?",1000).references(:scenes)
s.first.title
=> "My Story"
s.first.testval
NoMethodError: undefined method `testval' for #<Story:0x007fcd6b93eb68>

我猜这个问题是ActiveRecord不知道&#39; testval&#39;应属于故事&#39;而不是&#39;场景&#39;,但我不确定。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

很抱歉成为坏消息的承担者,但你无法进行自定义选择和急切加载,因为参考/ eager_load覆盖了一堆t%d_r%d的选择。

如果您需要虚拟属性,则需要使用不同的ActiveRecord策略。