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

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

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

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

2730閲覧

CSVファイルをダウンロードしたい

Takuma_Tanaka

総合スコア128

Ruby

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/09/12 09:39

ご覧頂いてありがとうございます。

###前提・実現したいこと
MysqlからCSVファイルを生成しダウンロードしたいと考えています。
複数のcontrollerにて生成したCSVファイルを一つのViewからLink_toでダウンロードしようとしています。

###発生している問題・エラーメッセージ

LoadError in FormController#csv Unable to autoload constant CSV, expected /vagrant/test/app/models/csv.rb to define it
LoadError in Form2Controller#download Unable to autoload constant CSV, expected /vagrant/test/app/models/csv.rb to define it

###該当のソースコード
routes.rb

ruby

1 get 'form/csv' => 'form#csv' 2 get 'form/download/(:branch)' => 'form2#download' 3 post 'csv/download' => 'csv#download' 4 get 'csv/download' => 'csv#download'

form_controller.rb

ruby

1 def csv 2 @form = Dog.all 3 4 respond_to do |format| 5 format.html do 6 @form = params[:dog] 7 end 8 format.csv do 9 send_data render_to_string, filename: "dog-#{Time.now.to_date.to_s}.csv", type: :csv 10 end 11 end 12 end 13

form2_controller.rb

ruby

1 def download 2 respond_to do |format| 3 format.html 4 format.csv do 5 branch = params[:branch] 6 entries = devide_into_branch(branch) 7 @entries = Entry.where(id: entries.map{|e| e.id}) 8 9 filename = "reuse_#{branch}" 10 headers['Content-Disposition'] = "attachment; filename=\"#{filename}.csv\"" 11 render :layout => false 12 end 13 end 14 15 end 16 17 private 18 def devide_into_branch(branch) 19 case branch 20 when "all" 21 return Entry.all 22 when "saga" 23 return devide_entries("佐賀県", false) 24 when "oita" 25 return devide_entries("大分県", false) 26 when "nagasaki" 27 return devide_entries("長崎県", false) 28 when "kumamoto" 29 return devide_entries("熊本県", false) 30 when "kagoshima" 31 return devide_entries("鹿児島県", false) 32 when "miyazaki" 33 return devide_entries("宮崎県", false) 34 when "fukuoka" 35 return devide_entries("福岡県", true) 36 else 37 end 383940

csv_controller.rb

ruby

1 def download 2 end

app>views>csv>download.html.erb

ruby

1 <div class="block txt"> 2 <p class="t2"><strong>CSV1</strong></p> 3 <form name="form1"class="block front"> 4 <%= link_to 'csv download', :controller => 'form2', :action => 'download', :branch => 'all', :format => 'csv', :class => 'button' %> 5 </form> 6 </div> 7 8 <div class="block txt"> 9 <p class="t2"><strong>CSV2</strong></p> 10 <form name="form1"class="block front"> 11 <%= link_to 'csv download', form_csv_path(format: :csv), :class => 'button' %> 12 </form> 13 </div>

app>views>csv.csv.ruby

ruby

1require 'csv' 2require 'nkf' 3 4csv_str = CSV.generate do |csv| 5 cols = { 6 'ID' => ->(u){ u.id }, 78910 '登録日時' => ->(u){ u.created_at.strftime('%Y年%m月%d日%H時%M分%S秒') } 11 } 12 13 # header 14 csv << cols.keys 15 16 # body 17 @form.each do |user| 18 csv << cols.map{|k, col| col.call(user) } 19 end 20end 21 22NKF::nkf('--sjis -Lw', csv_str)

###試したこと
エラー内容からCSVを読めていないのかと思い、form2_controller.rbやcsv_controller.rb、form_controller.rb、models/csv.rbに「require 'csv'」を入れてみましたが変わりませんでした。

他にエラーメッセージで情報を検索しても、どうして良いのか分かりません。

何か単純なことだとは思うのですが、全く思いつかず困っています。
どなたか解決法をご教示お願い致します。

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。
内容からmodelを先に読みこめば正常に動くのではないかと突然思い立ち、以下を記載したことで正常に動作しました。
他のファイルへの影響が出ないかを確認しないといけませんが、一旦クローズします。

app>config>application.rb

config.autoload_paths += %W(#{config.root}/app/models)

投稿2016/09/13 01:47

Takuma_Tanaka

総合スコア128

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問