タイトルのとおり、link_to
メソッドでフォーマットを指定する方法についてです
かなり簡単ですが、意外と記事がヒットしなかったので備忘録的として残しておきます
そもそもformatって?
出力形式のことです
通常はhtml形式で、htmlファイルがレンダリングされてますよね
他にもjson形式やpdf、csvなどがあります
今回はPDFの出力を想定してやってみます
linkの書き方
pathの引数にformatを指定するだけです!
slimファイル
= link_to '表示名', xxx_path(format: :pdf)
他にidを指定したり、parameterを設定する場合にも同じ様に引数に突っ込んじゃってOKです
slimファイル
= link_to '表示名', xxx_path(format: :pdf, id: @post, parameter_name: parameter_content)
コントローラでの処理
コントローラではformatを指定して処理を記述すればOK
pdfの場合はsend_fileを使ってファイルを表示させたりダウンロードさせたりすることが多いと思います。
次のように記述すると、ファイル名を指定してブラウザ上でPDFファイルを開いてくれます
コントローラ
class HogesController < ApplicationController
def show
respond_to do |format|
format.pdf do
send_file(pdf_path, filename: filename, disposition: 'inline')
end
end
end
private
def pdf_path
# pdfの保存場所を指定
@post.pdf.path # ← carrierwave使ってればこんな感じかな
end
def filename
# pdfのファイル名を指定
"#{@post.id}.pdf"
end
end
余談
rails routesをするとURIパターンの中に(.:format)ってありますよね
これがformat指定したときのURIになります
たとえば今回のようにformatをpdfにした場合は、URLがhttps://xxxxxx/xxx.pdf
みたいになります
フォーマットに応じて末尾に.フォーマット形式
の形で追加されるってことなんですね〜