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

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

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

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

Q&A

解決済

1回答

2143閲覧

rails:検索結果をCSV形式でダウンロードしたい。

Amkys

総合スコア17

Ruby on Rails

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

0グッド

0クリップ

投稿2019/03/13 09:10

編集2019/03/27 08:20

問題点

はじめて質問投稿させて頂きます。

検索結果をCSVでダウンロードし
CSVファイルには、カラムとデータのみを表示させたいが
データがHTML形式?になっている。

いろいろググってみましたが、問題解消できず質問させて頂きました。

今だ解決出来ず、情報として'Download CSV'ボタン押下時のログを記載します。

'Download CSV'ボタン押下時のログ

■Server Console
Started GET "/lot_histories.csv?q%5Bprocessed_lot_num_cont%5D=&q%5Btool_id_cont%5D=1&q%5Bunit_cont%5D=" for [server IP Address] at 2019-03-27 17:09:57 +0900
Processing by LotHistoriesController#index as CSV
Parameters: {"q"=>{"processed_lot_num_cont"=>"", "tool_id_cont"=>"1", "unit_cont"=>""}}
User Load (2.9ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
↳ vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
Rendering lot_histories/index.csv.ruby within layouts/application
LotHistory Load (3.0ms) SELECT "lot_histories".* FROM "lot_histories" WHERE "lot_histories"."tool_id" LIKE '%1%' LIMIT ? OFFSET ? [["LIMIT", 25], ["OFFSET", 0]]
↳ app/views/lot_histories/index.csv.ruby:5
Rendered lot_histories/index.csv.ruby within layouts/application (4.5ms)
rails/develop/sample/app/views/layouts/application.slim:12: warning: string literal in condition
Rendering text template
Rendered text template (0.0ms)
Sent data lot_histories_20190327170958.csv (0.5ms)
Completed 200 OK in 145ms (Views: 0.3ms | ActiveRecord: 5.8ms)

問題のCSVファイル

<!DOCTYPE html><html><head><title>ToolList</title><meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="1bc+1H+oKUsXpUoVEs+PDXA4O7rgqpzLqW4sBlmY5NFBg0u4CaDeRK4HkxZu7uelzorRjbeRxXp4AlDzl3XAZw==" /><link rel="stylesheet" media="all" href="/sample/assets/bootstrap_and_overrides.self-507679b6e014ab13ad44cd230748b813f795174034dc48cc9da8d583362027b9.css?body=1" data-turbolinks-track="reload" /> <link rel="stylesheet" media="all" href="/sample/assets/home.self-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css?body=1" data-turbolinks-track="reload" /> <link rel="stylesheet" media="all" href="/sample/assets/lot_histories.self-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css?body=1" data-turbolinks-track="reload" /> <link rel="stylesheet" media="all" href="/sample/assets/scaffolds.self-55bbf01fb89a78565db7158345eab27a5894ce497c9d83097a6e4670e02c03e0.css?body=1" data-turbolinks-track="reload" /> <link rel="stylesheet" media="all" href="/sample/assets/sessions.self-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css?body=1" data-turbolinks-track="reload" /> <link rel="stylesheet" media="all" href="/sample/assets/users.self-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css?body=1" data-turbolinks-track="reload" /> <link rel="stylesheet" media="all" href="/sample/assets/application.self-f0d704deea029cf000697e2c0181ec173a1b474645466ed843eb5ee7bb215794.css?body=1" data-turbolinks-track="reload" /><script src="/sample/assets/rails-ujs.self-d109d8c5c0194c8ad60b8838b2661c5596b5c955987f7cd4045eb2fb90ca5343.js?body=1" data-turbolinks-track="reload"></script> <script src="/sample/assets/activestorage.self-1ed4604ac2170045f1ffca4edb81a75246661555e4f9cf682bb8a21825e32e1c.js?body=1" data-turbolinks-track="reload"></script> <script src="/sample/assets/turbolinks.self-569ee74eaa15c1e2019317ff770b8769b1ec033a0f572a485f64c82ddc8f989e.js?body=1" data-turbolinks-track="reload"></script> <script src="/sample/assets/bootstrap.self-fdc98dee79ee88255e10cac6caa91338165cb76cf0d263744d8d90011fc2ef8f.js?body=1" data-turbolinks-track="reload"></script> <script src="/sample/assets/action_cable.self-69fddfcddf4fdef9828648f9330d6ce108b93b82b0b8d3affffc59a114853451.js?body=1" data-turbolinks-track="reload"></script> <script src="/sample/assets/cable.self-8484513823f404ed0c0f039f75243bfdede7af7919dda65f2e66391252443ce9.js?body=1" data-turbolinks-track="reload"></script> <script src="/sample/assets/home.self-877aef30ae1b040ab8a3aba4e3e309a11d7f2612f44dde450b5c157aa5f95c05.js?body=1" data-turbolinks-track="reload"></script> <script src="/sample/assets/lot_histories.self-877aef30ae1b040ab8a3aba4e3e309a11d7f2612f44dde450b5c157aa5f95c05.js?body=1" data-turbolinks-track="reload"></script> <script src="/sample/assets/sessions.self-877aef30ae1b040ab8a3aba4e3e309a11d7f2612f44dde450b5c157aa5f95c05.js?body=1" data-turbolinks-track="reload"></script> <script src="/sample/assets/users.self-877aef30ae1b040ab8a3aba4e3e309a11d7f2612f44dde450b5c157aa5f95c05.js?body=1" data-turbolinks-track="reload"></script> <script src="/sample/assets/application.self-66347cf0a4cb1f26f76868b4697a9eee457c8c3a6da80c6fdd76ff77e911715e.js?body=1" data-turbolinks-track="reload"></script></head><body>tool_id unit processed_lot_num Tool_001 AAA 1 Tool_001 BBB 555 </body></html>

求めているCSVファイル

tool_id unit processed_lot_num Tool_001 AAA 1 Tool_001 BBB 555

環境情報

サーバ:Red Hat Enterprise Linux Server release 6.8 (Santiago)
Rails 5.2.2
ruby 2.6.1p33

試したこと

WebブラウザがGoogle Chromeなのが原因かもと思いIEでも試しましたがダメでした。

該当のソースコード

lot_histories_controller.rb(抜粋)

class LotHistoriesController < ApplicationController before_action :set_lot_history, only: [:show, :edit, :update, :destroy] # GET /lot_histories # GET /lot_histories.json # GET /lot_histories.csv def index @q = LotHistory.ransack(params[:q]) @lot_histories = @q.result.page(params[:page]) respond_to do |format| format.html format.csv do send_data render_to_string, filename: "lot_histories_#{Time.now.strftime('%Y%m%d%H%M%S')}.csv", type: :csv end end end

index.html.slim

- model_class = LotHistory .page-header h1=t '.title', :default => model_class.model_name.human.pluralize.titleize = search_form_for @q do |f| = f.submit class: 'btn btn-default' ' = link_to 'Clear', url_for, class: 'btn btn-default' ' = page_entries_info(@lot_histories) table.table.table-striped thead tr th = sort_link(@q, :tool_id) th = sort_link(@q, :unit) th = sort_link(@q, :processed_lot_num) th = t '.actions', :default => t("helpers.actions") tr th= f.search_field :tool_id_cont th= f.search_field :unit_cont th= f.search_field :processed_lot_num_cont tbody - @lot_histories.each do |lot_history| tr td= link_to lot_history.tool_id, lot_history_path(lot_history) td= lot_history.unit td= lot_history.processed_lot_num td = link_to t('.show', :default => t("helpers.links.show")), lot_history_path(lot_history), :class => 'btn btn-info btn-xs' ' = link_to t('.edit', :default => t("helpers.links.edit")), edit_lot_history_path(lot_history), :class => 'btn btn-warning btn-xs' ' = link_to t('.destroy', :default => t("helpers.links.destroy")), lot_history_path(lot_history), :method => :delete, :data => { :confirm => t('.confirm', :default => t("helpers.links.confirm", :default => 'Are you sure?')) }, :class => 'btn btn-xs btn-danger' end = page_entries_info(@lot_histories) p = link_to t('.new', :default => t("helpers.links.new")), new_lot_history_path, :class => 'btn btn-primary' ' = link_to 'Download CSV', lot_histories_path(q: request.params[:q], format: :csv), :class => 'btn btn-default'

index.csv.ruby

require 'csv' csv_str = CSV.generate do |csv| csv << @lot_histories.column_names @lot_histories.all.each do |lot_history| csv << lot_history.attributes.values_at(*@lot_histories.column_names) end end

lot_history.rb

class LotHistory < ApplicationRecord validates :tool_id, presence: true end

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

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

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

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

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

guest

回答1

0

ベストアンサー

試してないのですが、おそらく

rails/develop/sample/app/views/layouts/application.slim

application.html.slimにリネームする事で改善する気がします。

投稿2019/03/27 09:00

asm

総合スコア15147

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

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

Amkys

2019/03/27 09:08

早速の回答有難うございます。 application.html.slim にリネームしたところ ヘッドと値だけ出力され、重い通りのCSV出力となりました。 心よりお礼申し上げます。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問