web-dev-qa-db-ja.com

Rails 3リンク付きのフォームを送信

正しいRails 3形式のリンクを含むフォームを送信するにはどうすればよいですか?ありがとうございます。

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

私のコードサンプル。

16
Marat_Galiev

「正しい」は、この文脈ではトリッキーな言葉です;)。 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へのプッシュにより、このヘルパーはなくなりました。

13
polarblau

グーグル経由でここに来た人々のために、私はゼケスの答えを改善しています。彼が提供するメソッドの代わりに、このメソッドをアプリケーションヘルパーに追加します。

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_submitform_forブロック内のどこかから呼び出されている限り)、JQueryコードは機能します。

29
Jazz

アプリケーションヘルパーに以下を追加できます。

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

次に、ビューファイル内で呼び出すことができます

link_to_submit 'Submit Form'

また、リンクはフォームの子である必要があります。

13
Zequez

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を使用せず、単純なフォーム送信のみを使用します。

7
nurettin

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部構成の記事のためにここに行ってください。

5
nessur