Параметры пути Rails 3 не являются частью параметров

Я пытаюсь обновить приложение Rails 2 до Rails 3, и у меня действительно проблемы с маршрутом. Вот что я имею в файле routes.rb

get 'profile/:login' => 'account#profile', :as => :profile

Когда я перехожу к http://localhost: 3000/profile/MyUsername, он не правильно добавляет: login в hash параметра. Глянь сюда:

Started GET "/profile/MyUsername?foo=bar" for 127.0.0.1 at Tue Mar 20 21:39:03 -0400 2012
 Processing by AccountController#profile as HTML
 Parameters: {"foo"=>"bar"}

По какой-то причине: login не является частью регулярных параметров. По подозрению, я осмотрел request.env и нашел это:

action_dispatch.request.path_parameters"=>{:action=>"profile", :controller=>"account", :login=>"MyUsername"}

Я полностью в тупике. Я что-то упускаю? Где я должен посмотреть, чтобы выяснить, что здесь происходит?

Обновить

Я начал играть с удалением драгоценных камней, и это магически сработало. Я просто прокомментировал драгоценные камни из Gemfile, пока не получил абсолютный минимальный набор, необходимый для загрузки главной страницы. В этот момент параметры были точно такими же, как ожидалось. Затем я добавил камни назад несколько раз, чтобы найти причину. Я добавил все обратно и... он работает сейчас. Сумасшедший, но все, что нужно, я думаю.

3 ответа

Похоже, вы смешали синтаксис "match" с "get". Пожалуйста попробуйте:

match 'profile/:login' => 'account#profile', :as => :profile, :via => :get

Или

get 'profile/:login', :to => 'account#profile', :as => :profile

в вашем config/routes.rb


Что-то вроде этого должно работать

match 'profile(/:login)' => "account#profile", :as => :profile

Если этого не произойдет, может быть что-то еще в вашем файле маршрутов, который конфликтует. Убедитесь, что любое match ':controller(/:action(/:id(.:format)))' (или аналогичные "все" маршруты) находятся в самом низу вашего файла маршрутов.


Когда я хочу использовать параметры URL, я всегда использую ресурсы (ресурсы) при определении маршрута. Это соглашение с Rails 3.x, чтобы вы могли попробовать.

resources :accounts , :exclude => :all do
 member do
 get :profile
 end
 end

Это должно помочь или любой другой способ определения URL ресурса.

licensed under cc by-sa 3.0 with attribution.