Рельсы: маршрутов не найдено - PullRequest
1 голос
/ 09 июля 2011

У меня есть связь has_one между пользователем и моделью настройки.У меня также есть SettingsController с действиями редактирования и обновления.На первой странице у меня есть ссылка для редактирования настроек:

<%= link_to (settings_path(current_user.setting)), do %>
..
<% end %>

Это вызывает ActionController :: RoutingError Нет совпадений с маршрутом {: controller => "settings",: action => "edit"} ... при попытке отобразить первую страницу.

Я застрял, стуча головой, почему это происходит.Используя Devise для аутентификации пользователя, этот current_user должен быть глобальной переменной.

Вот как определяются маршруты в маршрутах. Rb:

  resources :setting, :only => [:edit, :update]  
  match '/settings/:id' => "settings#edit", :controller => :setting, :as => :settings

Вот что возвращает рейк-маршруты:

    edit_setting GET    /setting/:id/edit(.:format)                 {:action=>"edit", :controller=>"setting"}
         setting PUT    /setting/:id(.:format)                      {:action=>"update", :controller=>"setting"}
        settings        /settings/:id(.:format)                     {:controller=>"settings", :action=>"edit"}

Другое предположение состоит в том, что имя контроллера (SettingsController) должно быть единственным, а не множественным при использовании ассоциации has_one.По какой-то странной причине Rails не замечает мой контроллер, хотя он и присутствует.

Помощь приветствуется.

Ответы [ 4 ]

2 голосов
/ 09 июля 2011

попробуйте с именем во множественном числе: настройки везде.

<%= link_to (settings_path(current_user.settings)), do %>
...

match '/settings/:id' => "settings#edit", :controller => :settings, :as => :settings
...

Rails автоматически называет во множественном числе модели. В вашем примере у вас есть странное сочетание имен во множественном и единственном числе, проверьте это. Все должно быть во множественном числе.

1 голос
/ 09 июля 2011

Хорошо, сначала, почему вы используете свой собственный контроллер для настроек пользователя вместо устройства?edit_user_registration_path

  • Ваш путь в порядке, он должен быть во множественном числе, потому что вы определили его в параметре :as

Еще один комментарий, есливы используете resources :setting, :only => [:edit, :update] почему вы используете следующую строку?и этот путь, я имею в виду, если вы объявите его таким образом, вы можете использовать edit_setting_path(id)

0 голосов
/ 09 июля 2011

Ааа, я нашел корень проблемы для этого. Спасибо, ребята, вы дали мне несколько идей. Дело в том, что я переносил модель пользователя, чтобы начать использовать модель настроек, и у пользователя, которого я использовал, не было никаких настроек (что было довольно странно, поскольку я создал их в консоли rails, и все выглядело нормально). Таким образом, объект установки был нулевым, и это вчера сводило с ума рельсы. Я впервые увидел все ошибки.

Да, маршрут ресурса для параметра должен быть единичным, поскольку он использует ассоциацию has_one. Со своей второй строкой route.rb я пытался получить пользователю все его настройки с более простым URL-адресом вроде ... / settings.

Я тоже пытался использовать devise edit_user_registration_path, но в прошлый раз что-то пошло не так. Наверное, придется еще раз подумать.

Спасибо всем!

0 голосов
/ 09 июля 2011

При вызове метода link_to попробуйте использовать setting_path (в единственном числе) вместо settings_path.

<%= link_to (setting_path(current_user.setting)), do %>
...