質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

2208閲覧

[Rails5]検索結果をCSV出力データに反映させる

satorushimo

総合スコア14

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/12/24 10:58

やりたいこと

ransackを用いて検索した値をCSVエクスポートに反映させたい

ソースコード

コントローラー

Ruby:admin_controller.rb

1def index 2 @posts= Post.ransack(params[:q]) 3 send_data render_to_string, filename: "index.csv", type: :csv 4end 5

ビュー

Ruby:index.csv.ruby

1require 'csv' 2 3result = CSV.generate do |csv| 4 csv_column_names = ['ID', 'タイトル', '投稿日'] 5 csv << csv_column_names 6 @posts.each do |p| 7 csv_column_values = [ 8 p.id, 9 p.title, 10 p.created_at, 11 ] 12 csv << csv_column_values 13 end 14end 15

質問内容

  • send_data render_to_stringrender_to_stringとはどういったstringでしょうか?リファレンスの内容が少なくいまいち理解ができていません。
  • 検索結果を反映させるにはどのようにすればいいのでしょうか?

回答お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

そもそも動かないのか、何かのエラーが解決できないのか、検索が効かない(全データが出る)のか
不明なので答えにくいですがコードを見る限りでは .result が不足しているように見えます

@posts = Post.ransack(params[:q]).result.each が使える形にする必要があると思います

投稿2018/12/26 01:34

Ighrs

総合スコア656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satorushimo

2018/12/26 03:11

情報不足ですみません。 実際のコードを必要な部分だけ簡潔に表示したのでそのままだと動かないだろうという部分もあるかと思います。実際のコードであればCSVダウンロードはでき、しっかりデータも撮れるのですが全件取得してしまい検索結果が反映されないというのが今回のハマりどころです。
guest

0

ベストアンサー

こんにちは。自分もあまり理解できていないので参考になるかわかりませんが…

respond_to do |format| format.csv {send_data @posts.generate_csv, filename: "index.csv"} end

みたいに書き換えてmodels/post.rbに

def self.csv_attributes ["id", "title", "created_at"] end def self.generate_csv CSV.generate(headers: true) do |csv| csv << csv_attributes all.each do |post| csv << csv_attributes.map{|attr| post.send(attr)} end end end

とするやり方はどうでしょうか?

send_data で@post.generate_csvのデータをindex.csvというファイル名を送るみたいな感じにしたら良いのだと思います。

おそらく@postsに検索結果が問題なく入っていれば検索結果が反映されているのではないでしょうか?

投稿2018/12/25 06:30

SibakenY

総合スコア63

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satorushimo

2018/12/26 03:09

やはりViewではなくModelに書く必要があるのですね。
Ighrs

2018/12/26 03:41

エラーなどでなく、検索が効かないだけで出力自体は成功しているなら View / Model を切り替えても改善しないと思います、ただの定義場所の違いでしか無いので... 検索が効かないなら params[:q] に正しく検索パラメータが渡されているのかとか パラメータの間違えがないか等を確認するのはどうでしょう? Ransack は正しくないパラメータはエラーではなく無視するので、カラム名ミス等で検索が効かない等も考えられます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問