2011-01-25 9 views
16

どのように正しいレール3の形式でリンク付きフォームを送信できますか?おかげさまで Rails 3リンクを含むフォームを送信

マイコードサンプル。

+0

いくつかのコードを追加して起動することができます。 – shingara

+0

コードサンプルを追加しました。 –

答えて

13

「正解」はこの文脈では難しい単語です。あなたはなぜ単にbutton要素を取ってリンクのように見せているのではないかと尋ねることができますか?

とにかく - 普通のHTMLでこれを達成することはできません(私の知る限りでは)。たとえば、Javascriptフレームワークを使用します。 jQueryのは、あなたは、単にこのような何かを行うことができます:

$('a').click(function(){ 
    $('form').submit(); 
    return false; 
}); 

のRails 2.3.x以降では、:submitパラメータを指定してみましょうlink_to_remoteヘルパーを持っていた(= DOM要素のIDは、デフォルトでは親フォームです)。したがって、あなたは次のように書くことができました:

link_to_remote 'submit', :url => {…}, :submit => "my_form" 

しかし、Rails 3のUJSへのプッシュでは、このヘルパーはなくなりました。 Railsの3で

+0

記事リンクは広告のために壊れている/ハイジャックされています。 –

+1

リンクを削除しました。 – polarblau

5

は、link_to_remoteヘルパーがなくなっているが、それはあなたのケースで

link_to 'submit me', url_for(@post), {:remote => true, :class => 'submit_me'}

に置き換えられています、あなたは、おそらくのようなので、あなたのフォームはAJAXをしたい:

<%= form_for @post, :remote => true do |f| %> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
    <p><%= f.submit %></p> 
<% end %> 

コンパニオンリンク付き:

link_to 'submit me', '#', :class => 'submit_me' 

次に、 .jsファイル内のページの本文に含ま:

$('.submit_me').click(function() { 
    $('form').submit(); 
    return false; 
}); 

アイデアがここにリストされているようAJAXリクエストにリンクやフォームを回すよりも複雑何かが、jQueryのコールバックを行うべきであるということである。

https://github.com/rails/jquery-ujs/wiki/ajax

そして、あなたが本当にgo here for a great 2-part article on it.

7

jQueryを使って、インタラクティブなAJAXリクエストに取得したい場合は、このワンライナーは、シンプルな形のために正常に動作します。

もちろん、jqueryを使用する必要はありません。フォームのDOM要素を見つけるだけで問題なく動作します。

<%= link_to t("translate.submit"), "#", class: "make it beautiful", :onclick=>"document.getElementById('your_form_id').submit()" %> 

このように、ajaxを使用しないで、単純なフォーム送信を行います。

+0

私はこのアプローチを使いました。ただし、 'return false;'を追加することもできます。 onclickの最後まで:リンクが守られていないことを確認する。 –

13

あなたは、アプリケーションのヘルパーに以下を追加することができます。

def link_to_submit(text) 
    link_to_function text, "$(this).closest('form').submit()" 
end 

は、その後、あなたのビューファイル内で、あなただけの

link_to_submit 'Submit Form' 

を呼び出すことができ、リンクは、フォームの子でなければなりません。

+0

ニース!これが存在していたことさえ知りませんでした。 – Jurgen

+0

非常に良い!これは間違いなく素晴らしい作品です! – RubyFanatic

+0

Googleからここに来た人には、この回答で見つけた改善点を見てください。 – Jazz

29

Google経由でここに来た人には、私はZequezの答えを改善しました。代わりに、彼が与える方法、代わりにアプリケーションヘルパーにこのメソッドを追加する:

def link_to_submit(*args, &block) 
    link_to_function (block_given? ? capture(&block) : args[0]), "$(this).closest('form').submit()", args.extract_options! 
end 

その後、Zequezは、あなたがちょうどあなたのビューでこれを行うことができ、単純なリンクについては、述べたように:

<%= link_to_submit 'Submit Form' %> 

。もっと複雑なボタンの場合は、リンク内で使用するHTMLオプションとブロックを渡すことができます。あなたはTwitterのブートストラップを使用する場合は、例えば、これは書式設定、あなたはCSSクラスを追加することができますし、アイコン:

<%= link_to_submit(class: 'btn btn-primary') do %> 
    <strong>Submit</strong> the Form <i class="icon-arrow-right"></i> 
<% end %> 

jQueryのコードは限りリンクは、フォームの子であるとして動作します(つまり、限り、ありますlink_to_submitform_forブロック内のどこかから呼び出されます)。

+2

まあ、それは確かにより強固なヘルパーです。 – Zequez

+0

はい、あなたの答えがなくてもわかりません。 jQueryと 'link_to_function'の存在はすべてあなたです。 – Jazz

+0

これは素晴らしいです!ありがとうございました。 – Patrick

関連する問題