web-dev-qa-db-ja.com

link_toを使用してrails

次のようにlink_toを使用してフォームを送信しようとしています。

 <%= form_for(@post,  :url=> '/post/action', :method=> 'post', :html => {:id=>'form_id'} ) do |f| %>
  ....

 <%= link_to 'submit', "/post/action", :onclick=>"document.getElementById('form_id').submit()" %>

  ....

ただし、フォームを投稿するのではなく、フォームを指定されたURLにリダイレクトするだけです。誰かがこれを行う方法を知っていますか?

12
random

次を使用できます。

<%= link_to 'submit', "#", :onclick => "$('#form_id').submit()" %>

jQuery以降のバージョンのRailsを使用している場合。

上記は機能しますが、ページが非常に長い場合は、「#」が原因でページの上部に移動します。これを避けたい場合は、次のようにします。

<%= link_to 'submit', "", :onclick => "$('#form_id').submit()" %>
24
Paulo Fidalgo

私は両方のことが起こると思います。ブラウザはフォームの送信を開始しますが、リンクのhrefもたどります。 # ..の代わりに/post/actionにリンクすることで修正できます。

...しかし、私はそれをすることをお勧めしません。より良いアプローチがいくつかあります。

まず、リンクの代わりにボタンを使用できます。リンクのように見えるようにスタイルを設定する必要がありますが、それは問題ではありません。驚き最小の原則(コードを読む人はフォームがボタン付きで送信されることを期待している)に違反せず、JavaScriptが必要ないため、より良いでしょう。

リンクの使用を主張する場合は、少なくともJavaScriptコードをビューからJavaScriptファイルに移動する必要があります。次に、この動作を目立たないように追加します(ただし、リンクを使用した場合のフォールバックは適切ではありません)。 jQueryを使用していると仮定すると、次のように単純である必要があります。

$(document).on('click', '[data-submit-form]', function(e) {
  e.preventDefault();
  $(this).closest('form').submit()
}
8
Stefan Kanev