Rails Routing: on =>: сбой коллекции, но только иногда - PullRequest
0 голосов
/ 17 февраля 2012

Некоторые детали, я использую Rails 3.2.1 на Ruby 1.8.7 / WEBrick локально и 1.8.7 EE / Passenger на сервере)

Вот моя проблема, у меня есть контроллер с именем foo сдействие с именем bar, и мне нужно создать маршрут к нему.Доступ к "bar" осуществляется через get.

Так как все документы говорят, я делаю:

resources :foo do
  get :bar, :on => :collection
end

Когда я загружаю представление (в хамле), которое имеет: = link_to "Bar", bar_foo_path, я получаю:

undefined local variable or method `bar_foo_path'  

Хотя это и не имеет смысла, я решил переключить: collection на: member, который фактически позволит загружать страницу, но, очевидно, ссылка взорвется, потому что яУ меня нет никакого идентификатора: id для добавления в URL.

Но вот странная часть, если я затем переключу: member обратно на: collection, он работает как надо ... то есть, пока мне не нужно перезапуститьвеб-сервер, то он снова сломан.Локально, это все время, поэтому работа с этими маршрутами, как вы можете себе представить, расстраивает.Это также ломается на сервере, потому что у меня, очевидно, нет возможности переключаться между: member и: collection

Я могу дублировать это по требованию как локально, так и на сервере, и все, что действительно имеет значение, кажетсяперейти от: member к: collection (чтобы я мог начать с: member и продублировать проблему), поэтому, пожалуйста, скажите мне, что я просто делаю какую-то глупость или я обнаружил какую-то ошибку с: on =>: collection?

edit:

Просто для пояснения, то же поведение проявляется, если я переключу его на более длинную форму:

resources :foo do
  collection do
    get 'bar'
  end
end

1 Ответ

0 голосов
/ 17 февраля 2012

Что ж, оказывается, мне следовало уделить немного больше внимания "рейковым маршрутам". По какой-то причине, хотя вся документация гласит, что маршрут должен быть "bar_foo_path", rails решил, что это "bar_foo_index_path".

Это не объясняет, почему его переворачивают на : член а затем снова вернуться к :коллекция хотя бы перевернул маршрут к ожидаемому «bar_foo_path», но, по крайней мере, приложение запустится.

...