投稿するリンクにRailslink_toを使用する


85

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

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リクエストを実行する方法はありますか?Rails3.2.9を使用しています。


あなたがそれをすることができるとは思わないでください。おそらく、net / httpまたはHTTPartyを使用してコントローラーでそれを行うのが最善ですか?
マイクキャンベル

私のコントローラーではそれを行うことができません。ユーザーは他のサイトに誘導される必要があります。あなたが正しいように見えますが、私のためにこれを行うための組み込みのリンクメカニズムはありません。
で。

回答:


143

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

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

link_to "Profile", profile_path(@profile.id, param1: 'value1', param2: 'value2'), method: :post

1
質問を更新したばかりですが、実際にはこれらのリンクに外部URLを使用しています。
で。

基本的に、リンクを使ってやりたいことはできないというメモを追加しました。送信ボタン付きのフォームが必要です。
クリスザルツバーグ2012年

3
ユーザーがJavaScriptを無効にしている場合、リンクはデフォルトで「GET」リクエストになることに注意することが重要です。
bkunzi01 2017年

8

次のように、URLのパラメーターをエンコードできます。

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

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


これは確かにパラメータを追加するための非常に良い方法です。
nathanvda 2012年

私のニーズでは機能しません。パラメーターはPOSTパラメーターである必要があります。しかし、おかげで、私はto_paramメソッドについて知りませんでした。?アフタープロファイルも必要です。
で。

わかりました。フォームを作成する必要があると思います。このロジックを数回繰り返す必要がある場合は、このフォームを作成するヘルパーメソッドを作成できます。
エイドリアンコキオ2012年

1
これはOPの質問に答えませんが、@ shioyamaの答えのようにURLヘルパーを使用する必要があります
Ben West

@BenWest:ヘルパーは最初は使用されておらず、意味があると思いました(たとえば、外部URLであった可能性があります)
Adrien Coquio 2014

3

ユーザーがJSを無効にしている場合、またはデフォルトで提供されている目立たないJSライブラリを削除した場合はlink_toGETリクエストを。

一般的に、私は実行するリンクを持つことはあまり好きではありません POSTリクエストする。それがフォームとボタンの役割だと思います。

したがって、簡単な(そしてより安全な)代替手段は、Railsbutton_toヘルパーを使用することです

button_to 'Profile', profile_path(@profile, param1: 'value1', param2: 'value2')

button_toこのmethodオプションもサポートしていますが、デフォルトであるpostため、省略しました。


Kostasに同意しました。さらに、メソッドpostを使用したlink_toは、InternetExplorerではうまく機能しません。
Pierre-Yves O.

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')


1

パラメータとhttpメソッドは一緒にする必要があります {param1: 'value1', param2: 'value2', :method: :post}

<%= link_to "Profile", profile_path(@profile), {param1: 'value1', param2: 'value2', method: :post} %>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.