0

これはおそらく私の側の大きな見落としですが、運がないので、約1時間修正を探していました!

データの .CSV へのエクスポートに関する RailsCast チュートリアルに従っています

CSV の入力に使用しているデータは、Ransackクエリからのものです (params 内)。

ただし、吐き出されているデータは、生データ自体ではなく、データ オブジェクトのコレクションです。

ブラウザでの出力:

#<Order:0x007f820823c738>,#<Order:0x007f82082ad708>,#<Order:0x007f82082ace98>,
#<Order:0x007f82082ac718>

そして、私はそれらの同じオブジェクトを取得しようとしていますが、印刷しただけです... RailsCastsチュートリアルのように(スクリーンショット)

これが私の Orders_Controller です

def index
  @search = Order.search(params[:q])
  @orders = @search.result

  @results = @orders

  respond_to do |format|
    format.html # index.html.erb
    format.csv { render text: @results.to_csv }
  end
end

チュートリアルのように、これらのデータ オブジェクトを生の文字列に変換する簡単な方法はありますか?

編集

to_csvこれが私のモデルでの私の方法です

def self.to_csv(options = {})
  CSV.generate(options) do |csv|
    csv << column_names
    all.each do |order|
      csv << order.attributes.values_at(*column_names)
    end
  end
end
4

1 に答える 1

2

だから私はこれが問題だと思います@search.result.Ordersの配列なので、メソッド@results.to_csvを呼び出していArray#to_csvます. 取得していないため、ActiveRecord::Relationおそらく別の方法で csv に変換する必要があります。

ransack_helpers.rbでモジュールを作成しlibます。

module RansackHelpers
  def self.to_csv(ransack_result, options = {})
    CSV.generate(options) do |csv|
      result_array = ransack_result.result
      column_names = result_array.first.class.column_names
      csv << column_names
      result_array.each do |item|
        csv << item.attributes.values_at(*column_names)
      end
    end
  end
end

orders_controller.rb

def index
  @search = Order.search(params[:q])
  @orders = @search.result

  respond_to do |format|
    format.html # index.html.erb
    format.csv { render text: RansackHelpers.to_csv(@search) }
  end
end

私はこのコードをテストしていないので、いくつか問題があるかもしれませんが、これはあなたがやりたいことだと思います.

于 2012-09-06T22:01:01.373 に答える