2013-02-11 60 views
0

我在我的應用程序3款+相關的連接表:Rails的導出CSV包括連接表的屬性

類別設定:

class RatingSet < ActiveRecord::Base 
    has_many :product_rating_sets, :dependent => :destroy 
    has_many :products, :through => :product_rating_sets 
end 

產品:

class Product < ActiveRecord::Base 
    has_many :product_recommendations, :dependent => :destroy 
    has_many :recommendations, :through => :product_recommendations 
    has_many :product_rating_sets, :dependent => :destroy 
    has_many :rating_sets, :through => :product_rating_sets 
end 

建議:

class Recommendation < ActiveRecord::Base 
    has_many :product_recommendations, :dependent => :destroy 
    has_many :products, :through => :product_recommendations 
end 

我正在嘗試添加一個導出到csv函數。

我的方法至今:

def self.as_csv 
    CSV.generate do |csv| 
     csv << ["set_id", "time", "item_id", "related_item_id", "rating"] 
     set_id = ['1','2','3'] 
     time = ['10:40am', "11:30pm", "14:40am"] 
     item_id = ["123456","123456765", "123456543"] 
     related_item_id = ["1234565432345","109876532", "564783920"] 
     rating = ["12.3", "13.2", "132.2"] 

     all.each do |item| 
     csv << item.attributes.values_at(*column_names)#lost here 
     end 
    end 
    end 

我就準備加入作用域找到SET_ID,時間,ITEM_ID,related_item_id和評級,但測試中,我使用上述值。如何遍歷每個數組,然後將這些值添加到導出的csv文件的各自標題下?

回答

3

將下面的方法添加到lib文件,並在我的每個控制器中調用它。基本上必須一次遍歷一個模型,並在獲得所需的所有屬性之後,將其添加到csv對象。

def self.as_csv(rating_id) 
     CSV.generate do |csv| 
      csv << ["set_id","item_id", "related_item_id", "rating", "time"] 
      product_ids = RatingSet.find(rating_id).products 
      product_ids.each do |product| 
      recommendation_ids = Recommendation.find(:all, :joins => :products, :conditions => ["product_id = ?", product.id]) 
      recommendation_ids.each do |recommendation| 
       recommendation.ratings.each do |ratings| 
       time_updated = (ratings.updated_at) 
       csv << [rating_id, product.id, recommendation.id, ratings.rating, time_updated] 
       end 
      end 
      end 
     end 
     end