我在进行数据库查询时无法检索虚拟属性。以下按预期工作:
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;,但我不确定。有谁知道如何解决这个问题?
答案 0 :(得分:0)
很抱歉成为坏消息的承担者,但你无法进行自定义选择和急切加载,因为参考/ eager_load覆盖了一堆t%d_r%d
的选择。
如果您需要虚拟属性,则需要使用不同的ActiveRecord策略。