正しいRails 3形式のリンクを含むフォームを送信するにはどうすればよいですか?ありがとうございます。
<%= form_for @post do |f| %>
<%= f.label :title %><br>
<%= f.text_field :title %>
<p><%= f.submit %></p>
<% end %>
私のコードサンプル。
「正しい」は、この文脈ではトリッキーな言葉です;)。 button
要素を取得して、リンクのように見せない理由を尋ねることができますか?
とにかく—プレーンHTMLではこれを実現できません(少なくとも私の知る限りでは)。たとえばのようなJavascriptフレームワークを使用します。 jQueryあなたは単にこのようなことをすることができます:
$('a').click(function(){
$('form').submit();
return false;
});
Rails 2.3.xには link_to_remote
ヘルパーがあり、:submit
パラメーター(= DOM要素のID、デフォルトは親フォーム)を指定できます。だからあなたは書くことができました:
link_to_remote 'submit', :url => {…}, :submit => "my_form"
しかし、Rails 3のUJSへのプッシュにより、このヘルパーはなくなりました。
グーグル経由でここに来た人々のために、私はゼケスの答えを改善しています。彼が提供するメソッドの代わりに、このメソッドをアプリケーションヘルパーに追加します。
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 Bootstrapを使用する場合、これによりCSSクラス、フォーマット、およびアイコンを追加できます。
<%= link_to_submit( class: 'btn btn-primary' ) do %>
<strong>Submit</strong> the Form <i class="icon-arrow-right"></i>
<% end %>
リンクがフォームの子である限り(つまり、link_to_submit
がform_for
ブロック内のどこかから呼び出されている限り)、JQueryコードは機能します。
アプリケーションヘルパーに以下を追加できます。
def link_to_submit(text)
link_to_function text, "$(this).closest('form').submit()"
end
次に、ビューファイル内で呼び出すことができます
link_to_submit 'Submit Form'
また、リンクはフォームの子である必要があります。
Jqueryを使用すると、このワンライナーは単純なフォームで正常に機能します。
<%= link_to t("translate.submit"), "#", class: "make it beautiful", :onclick=>"$('form').submit()" %>
もちろん、実際にはjqueryを使用する必要はありません。フォームのdom要素を見つけるだけでも、問題なく機能します。
<%= link_to t("translate.submit"), "#", class: "make it beautiful", :onclick=>"document.getElementById('your_form_id').submit()" %>
この方法では、ajaxを使用せず、単純なフォーム送信のみを使用します。
Rails 3では、_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
そして、あなたが本当にインタラクティブなAJAXリクエストに参加したいのなら、 それに関する素晴らしい2部構成の記事のためにここに行ってください。