0

举例:

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.

它类似于急切加载和includes,但我不想要所有列,只有指定的列include是不好的。

必须有一种从其他模型获取列的简单方法吗?我最好让项目作为Model简单数组/哈希的实例返回

4

1 回答 1

2

当您执行selectwith joinsorincludes时,您将返回一个ActiveRecordRelation. 这ActiveRecordRelation仅由您用来调用的类的对象组成select。连接模型中的选定列将添加到返回的对象中。因为这些属性不是Model' 的属性,所以当您检查这些对象时它们不会显示出来,我相信这是造成混淆的主要原因。

您可以在 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"
于 2013-08-25T18:45:23.447 回答