1

我在控制器中有以下方法:

# GET /units/1
def show
    @unit = Unit.find(params[:id]

    @product_instances = Array.new
    current_user.product_instances.each do |product_instance|
        if product_instance.product.unit == @unit
            @product_instances.push(product_instance)
        end
    end

    ... #rest of method
end

可以看出,我有四个表/模型:User、Product、ProductInstance 和 Unit。一个用户有许多 ProductInstances。每个 ProductInstance 都映射到一个 Product。一个单元有许多产品。

我只想获取与当前单元中的产品链接的用户产品实例。当前的代码可以做到,但是我怎样才能更好地重写它呢?如果可能的话,我想摆脱 for-each 循环和 if 语句,并用链式 ActiveRecord 查询替换它。

我尝试了以下类似的方法,但没有奏效:

@product_instances = current_user.product_instances.where(:product.unit => @unit)

看来你做不到:product.unit

4

1 回答 1

1

我想你可以试试这个

current_user.product_instances.joins(:product).where("products.unit_id = ?",@unit.id)

或使用哈希

current_user.product_instances.joins(:product).where(:products => {:unit_id => @unit.id})
于 2012-07-27T06:56:47.463 回答