Неправильные маршруты вложенных модулей - PullRequest
0 голосов
/ 23 июля 2010

Я предвосхищу это тем, что я новичок в RoR. У меня есть класс, который находится во вложенном модуле, ::Physical::Users::User. Код организован в пути, такие как приложение \ контроллеры \ физические \ пользователи.

Моя проблема возникает, когда я пытаюсь использовать form_for так:

<% form_for @user do |f| %>
  ...
<% end %>

Я получаю ошибку ActionView::TemplateError undefined method 'physical_users_users_path'

Я понимаю, что это связано с рельсами, ожидающими маршруты, которые не соответствуют моим. Чтобы заставить мое приложение работать так, чтобы ресурс: users шел прямо в правильный каталог (чтобы мне не приходилось использовать http: \ myurl.com \ физического \ пользователи \ пользователи \ 1 ', я добавил мой файл route.rb:

map.resources :users, :controller => 'physical/users/users'

Когда я запускаю "> Рейк-маршруты", я получаю следующее:

    users GET    /users(.:format)                   {:controller=>"physical/users/users", :action=>"index"}
          POST   /users(.:format)                   {:controller=>"physical/users/users", :action=>"create"}
 new_user GET    /users/new(.:format)               {:controller=>"physical/users/users", :action=>"new"}
edit_user GET    /users/:id/edit(.:format)          {:controller=>"physical/users/users", :action=>"edit"}
     user GET    /users/:id(.:format)               {:controller=>"physical/users/users", :action=>"show"}
          PUT    /users/:id(.:format)               {:controller=>"physical/users/users", :action=>"update"}
          DELETE /users/:id(.:format)               {:controller=>"physical/users/users", :action=>"destroy"}
                 /:controller/:action/:id           
                 /:controller/:action/:id(.:format) 

Есть ли способ сохранить более короткий URL моего пользовательского ресурса и заставить form_for искать правильный маршрут?

Опять же, я новичок, поэтому, если я что-то упустил в этом объяснении, дайте мне знать!

-

В ответ на приведенные ниже ответы контроллер находится по адресу app / controllers / Physical / Users / Users_controller.rb.

Изменение маршрутизации для использования пространств имен, таких как:

map.namespace :physical do |physical|
  physical.namespace :users do |users|
    users.resources :users
  end
end

генерирует маршруты, которые соответствуют тому, что ищет form_for, но тогда я теряю возможность использовать URL http: \ mysite.com \ users \ 1.

Спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 23 июля 2010

Согласен с @sespindola, но с контроллером в app \ controllers \ физического \ пользователя --- Я думаю, что это проблема пространства имен

Я думаю, что это может сработать для вас:

map.resources :users, :path_prefix => ':physical'
1 голос
/ 23 июля 2010

В маршрутах вы должны представлять модули с пространствами имен:

namespace :physical do
  namespace :users do
    map.resources :users
  end
end
0 голосов
/ 23 июля 2010

Ответ, который я нашел для работы, на самом деле является комбинацией ответов Джесси Волгамотта и Сеспиндолы. Я проголосовал за них обоих. Я поместил в свой файл rout.rb следующее:

map.namespace :physical do |physical|
  physical.namespace :users do |users|
    users.resources :users
  end
end

map.resources :users, :controller => "physical/users/users"

Если это кажется грязным и не лучшим способом сделать это, оставьте комментарий. Спасибо всем за помощь!

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