app/models/task.rb
に
def self.csv_attributes ["name",'description', 'created_at', 'updated_at'] end def self.generate_csv CSV.generate(headers: true) do |csv| csv << csv_attributes all.each do |task| csv << csv_attributes.map{|attr| task.send(attr)} end end end
というメソッドを記入しています。
そして、app/controllers/tasks_controller.rbには
def index @q = current_user.tasks.ransack(params[:q]) @tasks = @q.result(distinct: true).reverse #.recent respond_to do |format| format.html format.csv { send_data @tasks.generate_csv , filename: "tasks-#{Time.zone.now.strftime('%Y%m%d%S')}.csv"} end end
があり、tasks.csvにアクセスされたときに、csvデータをエクスポートするようにしています。
しかし、 indexアクションを起動しても、
NoMethodError in TasksController#index undefined method `generate_csv' for #<Array:0x00007ffff42f67b8>
と表示され、
format.csv { send_data @tasks.generate_csv , filename: "tasks-#{Time.zone.now.strftime('%Y%m%d%S')}.csv"}
のgenerate_csvメソッドがないよと指摘してきます。
ちなみに、これは「現場で使える Ruby on Rails 5 速習実践ガイド」という本の一部のサンプルで、
https://book.mynavi.jp/files/user/support/9784839962227/chapter7_20181024.zip
にて完成データがダウンロードできます。
その完成データを解凍して起動すると、そちらではエラーは出ません。
上記の2つのファイルの記述部分を比較しても一言一句違わないのですが、なぜか自作した方だけエラーが発生してしまいます。
なにか原因で考えられることがあれば、ご指摘いただけましたら嬉しいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。