1

アプリに 3 つのモデルと関連する結合テーブルがあります。

評価セット:

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、time、item_id、related_item_id、および評価を検索するスコープを追加する予定ですが、テストのために上記の値を使用しています。これらの各配列を反復処理し、エクスポートされた csv ファイルのそれぞれのヘッダーの下に値を追加するにはどうすればよいですか?

4

1 に答える 1

4

以下のメソッドを lib ファイルに追加し、各コントローラーで呼び出します。基本的に、一度に 1 つのモデルを反復処理する必要があり、必要なすべての属性を取得した後、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
于 2013-02-12T04:38:44.683 に答える