2017-09-07 2 views
1

アプリケーション内でCSVをエクスポートしようとしていますが、Active Record find_byメソッドでエクスポートしたいレコードを検索するたびに、csvにActiveRecord Relations私が表示しようとしているデータの代わりに。Rails csv parsing - vs limitで検索

私はこれを行う際に、例えば:

@Products = Product.find_by(:name => @name) 

を私はCSVに戻ってこれらの多くを得る:

Products = Product.limit(100) 

#<Product:0x007ff0d234cef0>,#<Product:0x007ff0d6922ad8> 

私はこれを行うがあればCSVは正確に表示されます。私のCSVに表示する関係を取り戻すために、特定の属性によってアクティブレコードを照会するにはどうすればよいですか?

PS私はこれは本当に簡単なチュートリアルで、次のよ

https://www.codementor.io/victor_hazbun/export-records-to-csv-files-ruby-on-rails-vda8323q0

編集 - ここで私は、CSVファイルを生成するために使用しているコントローラのコードです:

def export 
@products = [] 
@names = params[:nameselected].split(',').map(&:strip) 
@names.each{|name| 
    name = name.slice!(0) 
    @products.push(Product.find_by(:name => name) 
} 
respond_to do |format| 
    format.html 
    format.csv { send_data @products.to_csv } 
    format.xls 
end 

エンド

は、
def self.to_csv(options = {}) 
CSV.generate(options) do |csv| 
    csv.add_row column_names 
    all.each do |foo| 
    values = foo.attributes.values 
    csv.add_row values 
    end 
end 

end

ユーザがJavascriptで選択した商品名のリストを取り込み、それをCSVに生成したいのですが、私はちょうどJavascriptのCSVを作成することができますが、私は将来も共有可能にしたいです。

+0

あなたはCSVを生成するために使用しているコードを追加することはできますか?私たちはあなたが実行しているコードを見ずにコードがうまく動作しない理由を教えてくれません –

+0

@SimpleLime完了しました - 何か助けてください! –

答えて

1

あなたは

format.csv { send_data @products.to_csv } 

を行う際には、アレイのすべての要素のためのcsvを作成するタイプの配列

@products = [] 
@products.class 
=> Array 

@products変数を作成します。

names = ['firstname', 'secondname', 'thirdname'] 
Product.where(name: names) 

へ:あなたはProductモデルにクエリを行うと

@Products = Product.find_by(:name => @name) 
@Products.class 
=> Product 

あなたはProduct::ActiveRecord_Relation

だからあなたは、このようなクエリを実行する必要があるクラスのオブジェクトを返します。より多くの情報を見つけるには、あなたが好きなように質問を書くために以下のガイドを読むべきです

http://guides.rubyonrails.org/active_record_querying.html#array-conditions

http://api.rubyonrails.org/

+0

Зелёный@ '<製品:0x007ff0d234cef0>' 'だけの@ products.class.to_s'ある ので問題はЗелёный@彼の' self.to_csv'方法 –

+0

である私は、 '@productsは= Product.find_by(彼を引用しています:name => @name) 'と' find_by'は 'Product :: ActiveRecord_Relation'ではなく一つのオブジェクトを返しますが、いくつかの矛盾がある記事を書きました。彼は '@Product'を意味するのではなく、' @product'を意味します。問題は 'self.to_csv'です。行と列で分散されたオブジェクトのフィールドではなく、配列の文字列に値を返します' #、# ' 詳細は上記のリンクに含まれています –