ruby-on-rails – Railsのexample.com/controllerとexample.com/controller/の違いは何ですか?

私はPostsControllerを持っていますが、この例には欠かせませんが、スニペットを貼り付けるときに役立つでしょう。そしてcurrent_pageを使っていますか?名前が示すように、どのページが表示されているかを把握するため。私は奇妙な結果のように見えるものを得ています。

現在のページ? / posts vs. / posts /に行けば違う答えを返すでしょう。

テストとして、私のコントローラのインデックスビューで私は単に呼んでいます

current_page?(:action => 'index')

/ controller(末尾にスラッシュを付けずに)に移動した場合、current_page? trueを返します。ただし、/ controller /にアクセスすると、falseが返されます。

ログを記録すると、どちらも実際には同じアクションを実行することがわかります。

Processing PostsController#index (for 127.0.0.1 at 2009-08-11 18:28:12) [GET]
  Parameters: {"action"=>"index", "method"=>:get, "controller"=>"posts"}

予想どおり、アクションは両方に対して同じ結果を生成します。

私はRails 2.3.2とthis ticketを使っていますが、それが近いと思われる唯一のものです。唯一のコメント投稿者は、current_pageは「2つのURLが同じRESTfulオブジェクトを参照している場合、それらは同じページであると見なすべきだ」と考えています。

これについての洞察をありがとう。

ベストアンサー
レールのルーティングは末尾のスラッシュを許容しますが、渡したときには生成されません。 ‘index’、:controller => url_forへの ‘投稿’(標準のルートで)。

current_pageによると? documentationそれは単に渡された引数からURLを生成してから現在のリクエストURL文字列と比較します。この生成されたURLは末尾のスラッシュを持たないので、現在のURLが/ controllerの場合はtrueを返し、/ controller /の場合はfalseを返します。

問題を解決する方法はいくつかあります。

>生成されたURLではなく、パラメータを比較する
> / controller /から/ controllerにリダイレクトします。あなたがSEOのためにもページキャッシングなどをする場合、これは実際には良い考えです。
>いつものように他の方法があると思います:)

転載記事の出典を記入してください: ruby-on-rails – Railsのexample.com/controllerとexample.com/controller/の違いは何ですか? - コードログ