这是一个包含以下内容的嵌套选择:
@items = Item.where("complete = ?", true).includes( :manufacturer, {:order=>[:supplier, :agent] })
这是一个繁重的查询,因为它从上述所有包含的表中提取 1000 行数据。
如何让查询仅选择特定字段?
- 用户名,用户创建位置
- order.created_at
- 供应商名称
- 代理名称
- 制造商名称
最佳答案
ARel 中有一个 select 方法,但您必须使用正确的表名称(即复数,如果您有多态模型或者您正在使用 set_table_name 或其他类似的非标准做法,请注意)
@items = Item.
select('users.name', 'users.created_at', 'orders.created_at', 'suppliers.name', 'agents.name', 'manufacturers.name').
where(:users => { :fulfilled => true }).
includes(:orders => [:supplier, :agent], :manufacturer)
“我们可以使用带有连接的选择,不包括” - @Bhavesh_A_P
注意:
正如 @Bhavesh_A_P 上面指出的,带有 includes
的 select
不会产生一致的行为。看来,如果包含的关联没有返回结果,select
将正常工作,如果返回结果,则select语句将不起作用。事实上,它将被完全忽略,这样您的 select 语句就可以引用无效的表名,并且不会产生错误。 select
与 joins
将产生一致的行为。
关于ruby-on-rails - Rails 3 - 使用“包含”进行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4047833/