98

投稿リクエストを送信するために必要なリンクがあります。通常、私は jQuery を使用して、リンクのデフォルトの動作を防止してから、リンク先にフォームを送信します。これは、Rails が私を助けてくれるはずの何かのようです。案の定、link_toメソッドには POST http メソッドを指定するオプションがあります。

link_to "Profile", 'http://example.com/profile', method: :post

それは機能しますが、2 つのパラメーターも追加する必要があります。私は試した:

link_to "Profile", 'http://example.com/profile', method: post, param1: 'value1', param2: 'value2'

これらのパラメーターを<a>HTML 要素に追加しただけで、リンクをクリックしたときにそれらを送信しませんでした。

<a rel="nofollow" param1="value1" param2="value2" data-method="post" href="http://example.com/profile">Profile</a>

link_toまたは他のRailsメソッドを使用してパラメータでPOSTリクエストを行う方法はありますか? Rails 3.2.9 を使用しています。

4

5 に答える 5

156

簡単に言えば、「パラメータ」がフォームフィールドを意味する場合、これを行うことはできません (少なくとも、私が見ることができる簡単な方法ではありません)。代わりに、リンクのように見えるようにスタイル設定された送信ボタンのあるフォームを使用する必要があります (そのようにしたい場合)。

一方、クエリパラメーターを意味していた場合、これは機能します。

link_to "Profile", profile_path(@profile.id, param1: 'value1', param2: 'value2'), method: :post
于 2012-11-16T10:32:37.797 に答える
8

この方法で URL のパラメーターをエンコードできます。

link_to "Profile", 'http://example.com/profile?' + {param1: 'value1', param2: 'value2'}.to_param, method: :post

ニーズに合わない場合は、フォームよりもフォームを使用することをお勧めしますlink_to

于 2012-11-16T10:56:00.700 に答える
1

データを POST するには、フォームが必要です。ただし、送信ボタンは必要ありません。何らかの理由でこれをリンクのように見せたい場合は、実際には JavaScript を介してフォームを送信するリンクにすることができます。以下の例では、POST リソースはフィールドを必要としない単なる REST アクションであるため、フォーム入力コントロールはありません。データを投稿したい場合は、非表示の入力フィールドをフォームに入れるだけです。

<%= form_tag('http://something_postable', :method => :post, :class => 'internal') %></form>
<%= link_to_function('Label for Link', 'previous("form").submit()', :title => 'Hover text for link') %>

フォームにはクラスが割り当てられているため、CSS を使用してスタイルを設定したり非表示にしたりできます (例: 'display: inline')。

于 2014-09-13T05:31:52.017 に答える