【Rails】モデルや関連する情報をJson形式でダウンロードする方法
全体の流れ
- ダウンロード用のルーティングを作る
- view側のダウンロード用ボタンを作る
- controllerでダウンロード用の処理をかく
具体例
例えば、証明書関連をダウンロードしたいとして、以下のようなルーティングを作ってあげます。
コード
resources :certificates, only: %i[edit update] do
member do
get :download_setting_info
end
end
続いて、view側でボタンを作成します。上で設定したルーティングに飛べるようにしてあげます。
method: :getをつけておかないと、defaultでpostへルーティングされてしまうので、注意です。
コード
<div class="nav__actions">
<div class="nav__item"><%= button_to t(".download_setting_info"), download_setting_info_certificate_path(@certificate.id), { method: :get, class: "btn btn--primary" } %></div>
</div>
あとはコントローラーの処理です。
証明書類の名前などをダウンロードして表示したいので、以下のような感じで書きます。
コード
def download_setting_info
@certificate = Certificate.find(params[:id])
setting_info_hash = {
"DeviceId": @certificate.device.device_id,
"PublicKey": @certificate.public_key,
"PrivateKey": @certificate.private_key,
}
setting_info_json = JSON.pretty_generate(setting_info_hash)
send_data(setting_info_json, type: 'application/json', filename: "#{@certificate.device.aws_iot_device_id}.json")
end
こんな感じで行けるかと思います。
では。