举例来说:
r = Model.arel_table s = SomeOtherModel.arel_table Model.select(r[:id], s[:othercolumn].as('othercolumn')). joins(:someothermodel)
将产生sql:
`SELECT `model`.`id`, `someothermodel`.`othercolumn` AS othercolumn FROM `model` INNER JOIN `someothermodel` ON `model`.`id` = `someothermodel`.`model_id`
哪个是正确的。但是,在加载模型时,该属性将othercolumn被忽略,因为它不是的属性Model。
othercolumn
Model
它与渴望加载和相似includes,但是我不希望所有列,仅指定的列include是不好的。
includes
include
必须有一种简单的方法来从其他模型获取列吗?Model与简单数组/哈希相比,我最好让这些项作为的实例返回
当您select使用joins或进行时includes,将返回ActiveRecordRelation。它ActiveRecordRelation仅由您用来调用的类的对象组成select。从联接模型中选择的列将添加到返回的对象中。由于这些属性不是Model的属性,因此当您检查这些对象时它们不会出现,并且我相信这是造成混淆的主要原因。
select
joins
ActiveRecordRelation
您可以在rails控制台中尝试以下操作:
> result = Model.select(r[:id], s[:othercolumn].as('othercolumn')).joins(:someothermodel) => #<ActiveRecord::Relation [#<Model id: 1>]> # "othercolumn" is not shown in the result but doing the following will yield correct result > result.first.othercolumn => "myothercolumnvalue"