LoginSignup
0
0

More than 1 year has passed since last update.

Rails コントローラーでActionController::UnknownFormatが起きた時の話

Posted at

背景

この間仕事でとあるcsvの出力機能を作っている時にエラーが起きて思ったより解消に時間がかかったので、ちょっとメモっておきたいと思いました。このエラーは他の原因で起きることもあるようですが、参考となればと思います。

環境

Ruby 2.7.2
Rails 6.0.3.6

コード

通常のhtml表示と同じルートにしたいので、 respond_to を使いました。
また、もともとransackを使ってフィルター機能を導入していて、csv出力の時もフィルタリングされた結果をベースに出力しています。

def index
  @q = Book.ransack(search_params)
  respond_to do |format|
    format.html do
      @books = @q.result.page(params[:page])
    end
    format.csv do
      books = @q.result
      redirect_to books_path, flash: { danger: '対象書籍がありません。' } if books.size === 0 and return
      csv_data = OrderReportCsvGenerator.new(books).generate
      send_data(csv_data, filename: "書籍一覧_#{Time.current.strftime('%Y%m%d_%H%M%S')}.csv", type: :csv)
    end
  end
end

問題点

上記のコードで実行してみたら、↓のエラーが起きて、すぐ問題点を気づいてくれる人もいらっしゃると思いますが、自分1人だと1時間ほどかかりました。。orz

Admin::BooksController#index is missing a template for this request format and variant. request.formats: ["text/csv"] request.variant: []

実はこちらの一行に問題がありました。

redirect_to books_path, flash: { danger: '対象書籍がありません。' } if books.size === 0 and return

解決

上記のコードを以下のように書き直せば解決しました。

return redirect_to books_path, flash: { danger: '対象書籍がありません。' } if books.size === 0
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0