嵌套模块路由不正确

时间:2010-07-23 01:06:33

标签: ruby-on-rails routes module path

我将在此之前提到我是RoR的新手。我有一个驻留在嵌套模块::Physical::Users::User中的类。代码被组织到诸如app \ controllers \ physical \ users之类的路径中。

当我尝试使用form_for时出现问题:

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

我收到错误ActionView::TemplateError undefined method 'physical_users_users_path'

据我所知,这与rails期望与我的路线不匹配的路线有关。为了使我的应用程序工作,以便资源:用户直接进入正确的目录(这样我就不必使用http:\ myurl.com \ physical \ users \ users \ 1',我将以下内容放入我的routes.rb文件:

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

当我运行“&gt; rake routes”时,我得到以下内容:

    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) 

有没有办法维护我的用户资源的较短网址并让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 个答案:

答案 0 :(得分:1)

在路由中,您必须使用名称空间表示模块:

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

答案 1 :(得分:1)

同意@sespindola,但是app \ controllers \ physical \ users的控制器 - 我认为这是命名空间问题

我认为这可能适合你:

map.resources :users, :path_prefix => ':physical'

答案 2 :(得分:0)