2015-02-08 54 views
0

在我的項目中,我使用closure_tree寶石,並希望在我的Product模型上編寫自定義方法,該方法返回給定集合的所有父級。從現有的ActiveRecord獲取一個空白的新關係::關係

我試着寫類方法:

class Product < ActiveRecord::Base 
    has_closure_tree 

    def self.tree_parents 
    root_product_ids = [] 

    all.each do |product| 
     root_product_ids << (product.root? ? product.id : product.parent_id) 
    end 

    Product.where(id: root_product_ids) 
    end 
end 

返回的關係將被合併到以前的,但我需要這個方法返回絕對新的​​獨立ActiveRecord::Relation

» leaf_product = Product.where(id: 219) 
    Product Load (0.7ms) SELECT "products".* FROM "products" WHERE "products"."deleted_at" IS NULL AND "products"."id" = 219 
=> #<ActiveRecord::Relation [#<Product id: 219, name: ... ]> 
» leaf_product.tree_parents 
    Product Load (1.0ms) SELECT "products".* FROM "products" WHERE "products"."deleted_at" IS NULL AND "products"."id" = 219 
    Product Load (0.7ms) SELECT "products".* FROM "products" WHERE "products"."deleted_at" IS NULL AND "products"."id" = 219 AND "products"."id" IN (1) 
=> #<ActiveRecord::Relation []> 

總之我希望此方法僅返回Product.where(id: root_product_ids),並且不要將其與Product.where(id: 219)鏈接起來。

如何返回僅包含IN聲明的新關係而沒有父關係聲明WHERE id ...

回答

0

你正在做的不太清楚,但它聽起來就像你正在尋找unscoped方法:

Product.unscoped.where(id: product_ids)