##やりたいこと
RailsのForm内にbuttonを置いて、csv fileをdownloadさせたい(例です)
##はまったこと
- link_toだと見た目をボタンに変更するCSSを書く必要がある(Bootstrapとか使えない環境なので手軽でなさそうだった)
- Form内にbutton_toを配置すると、そのFormのsubmitになってしまう
##解決法
Form内にbutton_tag(typeはbutton)を配置し、onclickでurlを変更する
(もっと良い方法があれば教えてください)
試行3を参照ください。
##試行1(link_toを使って、見た目だけボタンにする)
リンクの形であれば次の感じで実現できるので、後は見た目をbuttonに変更すれば良さそうです。
<%= link_to 'download', books_path(format: :csv) %>
Bootstrapを使えばclass指定で簡単にできるのですが、
Bootstrapを使えない状況なので自分でCSSをゴリゴリ書くしかなさそうです。
もっと簡単に実現できないか、まず他を調べてみようと考えました。
##試行2(button_toを使う)
次の感じで実現できると考えたのですが、Formの中で書くと、そのFormのsubmitになってしまいました。
(Formの外に出してあげれば期待通りの動きはします)
<%= button_to 'download', books_path(format: :csv), method: :get %>
今回はFormの中に置きたかったので、別の方法を探してみます。
##試行3(button_tagとonclickを使う)
submitでないbuttonを配置し、onclickでurlを書き換える方法です。
<%= button_tag type: 'button', onclick: "link_to('#{books_path(format: :csv)}')" do %>
<%= 'download' %>
<% end %>
function link_to(link) {
location.href = link;
}
期待通りの動作をするようになったので、この方法を採用しました。