【Rails】モデルや関連する情報をJson形式でダウンロードする方法

【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

こんな感じで行けるかと思います。

では。

Leave a Reply

Your email address will not be published.

CAPTCHA