迷い人

日々勉強。勉強の先に何か見つかるといいなぁ

【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

 

もっとスマートな方法もありそうなので、うまい方法が思いついたら更新したいと思います。