3

Rails 4th Edition (Rails 3.2+) を使用してアジャイル Web 開発を行っていますが、button_to メソッドに多少混乱しています。この本と私が行った他のすべてのGoogle検索では、button_toがPOSTリクエストを使用していると述べています。しかし、ページを調べると、button_to は GET メソッドを使用しているようです。

さて、私はこれが間違っている可能性がありますが、私はPHPのバックグラウンドから来ており、POSTメソッドは常に、データがURLなしでサーバーに渡され、配列サーバー側からアクセスされることを意味していました:

$_POST['form_item'] 

さらに、GET 要求は、URL を介してデータを渡すことを意味しました。

someurl.com/somepage?DATA=data_value

この button_to コードを使用する:

  <%= button_to 'Add to Cart', line_items_path(product_id: product_id) %>

これはフォーム出力になります。

<form action="/line_items?product_id=4" class="button_to" method="post">
<div>
<input type="submit" value="Add to Cart" />
<input name="authenticity_token" type="hidden" value="vGT1scGqasbQAMxYwofXHCM62MfSyM/pNty69Ep5t38=" />
</div>
</form>

このフォームのアクションは、URL (?product_id=4) を介してデータを渡しているようです。「method='post'」とはっきり見えますが、これはGETを使っているのではないでしょうか?

4

3 に答える 3

7

デフォルトでは、POST メソッドを使用します。GET が必要な場合は、次のように入力します。

<%= button_to 'Add to Cart', line_items_path(product_id: product_id), :method => :get %>

Rails のログをチェックして、それが本当に POST 要求であることを確認できます。

于 2012-07-18T11:32:00.503 に答える
1

FancyDancyが言うように、情報がURLを介して渡されたとしても、それはまだPOSTリクエストです。Railsはとを区別しませ$_GET$_POST$_REQUEST:と同等のものしかありませんparams。したがって、product_idがURLを介して渡されるか、非表示のフォームフィールドを介して渡されるかは実際には重要ではありません。どちらの場合も、を介して取得できますparams[:product_id]

于 2012-07-19T23:51:56.457 に答える
1

POST リクエストには、QUERY_STRING を含めることもできます。問題は、 というline_items_pathパスにパラメータがないことです。その:product_idため、ヘルパーはこのパラメータを QUERY_STRING に追加します。パスに入れたい場合は、ルートを確認してください(rake routes)、次のようなものが必要です

POST      /line_items/:product_id(.:format)     line_items
于 2012-07-18T12:26:28.033 に答える