Параметры пути Rails 3 не являются частью params - PullRequest
0 голосов
/ 21 марта 2012

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

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

Когда я перехожу на http://localhost:3000/profile/MyUsername,, он неправильно добавляет: войти в хэш params.Смотрите здесь:

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"}

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

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

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

Обновление

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

Ответы [ 3 ]

1 голос
/ 21 марта 2012

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

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

Или

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

в вашем конфиге / rout.rb

0 голосов
/ 21 марта 2012

Как то так должно работать

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

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

0 голосов
/ 21 марта 2012

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

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

Это должно помочь или как-то иначе определить URL ресурса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...