【rails】CSVファイルのダウンロードの続き
前回はquestionsテーブルの保存されている質問は全てCSVファイルでダウンロードできる機能を実装しました。
今回はあるカテゴリに属する質問のみCSVファイルでダウンロードできる機能を実装しようと思います。
質問にカテゴリを設定する機能についてはすでに実装済みなので、それを活用する方法を考えました。
処理の概要は以下のようになっています。
・web画面でカテゴリを選択すると、そのカテゴリを含む質問のみ画面に表示される。
・画面に表示されている質問のみCSVファイルでダウンロード可能。
機能実装のポイントは
・CSVファイルをダウンロードするボタンを押下した時に「category_id」送るようにして、category_idがコントローラに送られてきたら、それを含む質問のみ取得するようにする。
実際のコードは以下のような感じ。
%form{action: questions_path(format: :csv), method: "get"} %ul %li %input{type: "submit", value: "csv出力"} %input{type: "hidden", name: "csv_category_id", value: @category}
inputのvalueで質問が持っているカテゴリの情報を渡すようにしました。inputは見せる必要がないのでhiddenにしています。
あとはindexメソッドで受け取って、ifで分岐させて必要な情報を@questionsに格納すれば、その情報がCSVファイルでダウンロードできます。
def index @category = params[:csv_category_id] || params[:category_id] if @category @mycategory = Category.find(@category) @questions = @mycategory.questions.includes(:user).order("created_at DESC") else @questions = Question.includes(:user).order("created_at DESC") end end
もっとスマートな方法もありそうなので、うまい方法が思いついたら更新したいと思います。