2015-04-17 57 views
0

我跟着這個(https://robots.thoughtbot.com/active-record-eager-loading-with-query-objects-and-decorators)教程來構建我的查詢對象,但是如何從結果中訪問我的商店數據?如何從我的Rails查詢對象訪問數據?

我獲得以下對象與我去結果= StoreWithRecentDeals.new(店:Store.all)

查詢對象https://gist.github.com/jianbo/4125f3203005358e99f5

話,我想我的商店和交易數據出這個對象的時候我去result.stores我得到 引發ArgumentError:錯誤的參數數目(2 1)

這是我的代碼

class StoreWithRecentDeals 
    def initialize(stores:) 
     @stores = stores.order(created_at: :desc).limit(5) 
     @deal_cache = build_deal_cache 
    end 

    def stores 
     @stores.map { |store| StoreWithLatestDeals.new(store, @deal_cache) } 
    end 

    private 

    def build_deal_cache 
     deals.group_by(&:store_id) 
    end 

    def deals 
     Deal. 
     select("*"). 
     from(Arel.sql("(#{ranked_deals_query}) AS ranked_deals")). 
     where("deal_rank <= 3") 
    end 

    def ranked_deals_query 
     Deal.where(store_id: @stores.map(&:id)).select(<<-SQL).to_sql 
     deals.*, 
     dense_rank() OVER (
      PARTITION BY deals.store_id 
      ORDER BY deals.created_at DESC 
     ) AS deal_rank 
     SQL 
    end 
    end 

    class StoreWithLatestDeals < SimpleDelegator 
    def initialize(store, deals_by_store_id) 
     super(store) 
     @deals_by_store_id = deals_by_store_id 
    end 

    def latest_deals 
     @deals_by_store_id[id] || [] 
    end 
    end 

回答

0

我猜你的問題是,你在類StoreWithRecentDealsstores作爲實例變量名稱以及方法名稱。

我會建議給一些其他的名字你的方法:

def fetch_stores 
    @stores.map { |store| StoreWithLatestDeals.new(store, @deal_cache) } 
end