包含的Rails条件

时间:2014-07-17 23:32:23

标签: ruby-on-rails activerecord

我有三个模特

class Item < ActiveRecord::Base
    has_many :order_items
    has_many :orders, through: :order_items
end

class OrderItem < ActiveRecord::Base
    belongs_to :order
    belongs_to :item
end

class Order < ActiveRecord::Base
    has_many :order_items
    has_many :items, :through => :order_items
end

我为每个用户提供了一个帮助方法'current_order'。

Item.includes(:order_items)

返回所有order_items。

我需要包含所有项目:order_items条件为'order_id = current_order'。

2 个答案:

答案 0 :(得分:0)

我不知道你的意思&#34;包括:order_items&#34;但答案很简单:

Order.where(order_id: current_order).items

答案 1 :(得分:0)

includes您不需要current_order

基本上,includes应该会阻止N+1 queries问题,当您从一个表中获得多条记录并尝试为每条记录获取关联时会发生这种问题。

在您的情况下,current_order将运行一个查询:

select * from orders where order_id = 1

current_order.items只会运行另一个查询:

select * from order_items where order_id = 1