3

Ruby on Railsを使用してアプリケーションを作成し、herokuでTHINサーバーを使用しています。

現在Rails3.2.8を使用しています

私は理解できないこの奇妙な行動に出くわしました。

リンクは、ナビゲーションバー内のlink_toヘルパーを使用して作成されました。HTTP GETメソッドを明示的に使用したいので、rubyコードは次のように記述されています。

<%=link_to "FAQ",help_path,:method=> :get %>

結果のhtmlは次のようになります。

<a data-method="get" href="/en/help">FAQ</a>

rakeルートを実行すると、help_pathは次のように表示されます。

help        (/:locale)/help(.:format)          static_pages#Help {:locale=>/en}

ただし、FirebugのURLで何が起こっているかを([ネット]タブを使用して)見ると、GETメソッドの代わりにPOSTが使用されているように見えます。だから見る代わりに:

GET help

これは代わりに見られました:

POST help

次のようにgetメソッドの明示的な呼び出しを削除すると、次のようになります。

<%=link_to "FAQ",help_path %>

その結果、次のようになります。

<a href="/en/help">FAQ</a>

次に、firebug-> Netでは、このURLも表示されません:GET help

URL列の下に、代わりにこれが表示されます。

? undefined 

URLが定義されていない場合、herokuのRailsアプリは、プリコンパイルされたマニフェストアセットファイルをロードする代わりに、すべてのアセットファイルを個別にロードしようとします。

誰かがこの状況を経験したことがありますか?Railsやherokuの魔法のブラックボックス、またはシンサーバーのどこでgetメソッドとpostメソッドの動作を変更できるのかよくわかりません。

どんな提案でも大歓迎です!

4

1 に答える 1

4

link_toを作成し、:メソッドとして:getを明示的に指定する理由がわからないと言い始めます。とにかく、これはデフォルトの動作です。

あなたの質問へ:link_toの:methodオプションを使用すると、目的のURLに投稿するフォームと目的のリクエストタイプ(POST / PUT / DELETE / GET)の_method非表示入力が生成されるため、POSTリクエストが表示されます。Railsは、_methodパラメータを含むPOST要求を処理する方法を知っており、適切なルートで応答します。あなたの場合-GETアクションに一致するルート。

link_toの詳細については、こちらをご覧ください。

編集:

ドキュメントをよく読んだところ、:methodオプションは値として:getをサポートしていないようです。

于 2012-09-18T16:58:14.583 に答える