2009-08-11 3 views
4

У меня есть PostsController, который не является существенным для примера, но поможет, когда я вставляю фрагменты, и я использую current_page?, чтобы, как следует из названия, выяснить, какая страница отображается. Я получаю то, что кажется странным результатом.В чем разница между example.com/controller и example.com/controller/ в Rails?

current_page? вернет различные ответы, если я перейду к /posts против /posts/.

В качестве теста на индексном для моего контроллера я просто позвонив

current_page?(:action => 'index') 

Если я иду/контроллер (без слэша), current_page? возвращает истину. Однако, если я перейду в/controller /, он вернет false.

Tailing журнал показывает, что оба делают на самом деле попал в такое же действие

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 должен «считать два URL-адреса одной и той же страницей, если они оба относятся к одному и тому же объекту RESTful».

Спасибо за любое понимание этого.

ответ

4

рельсы маршрутизации терпит слэш, но он не будет сгенерирован при передаче :action => 'index', :controller => 'posts' к url_forстандартных маршрутов).

в соответствии с текущей_страницей? documentation он просто генерирует url из переданных аргументов и затем сравнивает с текущим запросом url строка. так как этот сгенерированный URL не будет иметь косую черту он возвращает истину, если текущий URL является/контроллером и ложью, когда/контроллер/

Есть несколько способов, вы можете решить вашу проблему:

  • сравнить Params, не сгенерированный URL-адрес
  • перенаправление с/контроллер/в/контроллер. Это действительно хорошая идея, если вы кэширование страниц и т.д. также для SEO
  • Я уверен, что есть и другие способы, как всегда :)
+0

Это имеет смысл. Должен ли, вероятно, проверить источник текущей_страницы? Большое спасибо! – theIV