前提・実現したいこと
railsにcsv出力機能をもたせたいのですが下記のようなエラーが発生しております。
発生している問題・エラーメッセージ
undefined method `generate_csv' for #<Message::ActiveRecord_Relation:0x00007f8d25156df0>
該当のソースコード
controller
1 def index 2 # ranssackで検索 3 @search_messages = Message.order("created_at DESC").ransack(params[:q]) 4 # kaminariでページネーション 5 @messages = @search_messages.result(distinct: true).page(params[:page]).per(10) 6 7 respond_to do |format| #viewから送られてくるフォーマットで処理を分岐させる 8 format.html #fomatが htmlなら ...なにもしない 9 #fomatがcsvならsend_dataメソッドでデータを送り、@messageデータを generate_csv(modelに定義した関数)してcsvファイルとして返す 10 format.csv { send_data @messages.generate_csv, filename: "メッセージ#{Time.zone.now.strftime('%Y%m%d%S')}.csv"} 11 end 12 end
model
1 #csv I/O 2 def self.csv_attributes #どの属性をどの順番で出力するか決めた 3 ['title','body','created_at'] 4 end 5 6 def self.generate_csv #selfは引数 7 CSV.generate(headers: true) do |csv| #generateでcsv作成 8 csv << csv_attributes #1行目のタイトル = 'title','body','created_at' 9 all.each do |message| 10 csv << csv_attributes.map{|attr| message.send(attr)} #1行ずつmessageから取り出してcsvに与えている 11 end 12 end 13 end
view
1<button class= 'btn'><%= link_to '表示メッセージcsv出力' ,messages_path(format: :csv), class: 'btn-sm'%></button>
試したこと
スペルミスがないかの確認
すみません何故generate_csvがundefindになるのか分かりません
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ruby 2.5.0
rails 5.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。