带有命名空间rails 3.1的URL路由中的点

时间:2012-01-10 16:44:06

标签: ruby-on-rails ruby-on-rails-3 namespaces ruby-on-rails-3.1 routes

我在 routes.rb

中有这个
root :to => "posts#index"

  devise_for :users,  :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }

  resources :users, :only => :show

  resources :boards 

  resources :posts do
  resources :comments
  end 

namespace :users do
 resources :posts do
  get :posts, :on => :member
 end
 resources :boards do  
  get :boards, :on => :member
 end  
end      

rake routes:

  boards_users_board GET    /users/boards/:id/boards(.:format)        {:action=>"boards", :controller=>"users/boards"}
        users_boards GET    /users/boards(.:format)                   {:action=>"index", :controller=>"users/boards"}
                    POST    /users/boards(.:format)                   {:action=>"create", :controller=>"users/boards"}
     new_users_board GET    /users/boards/new(.:format)               {:action=>"new", :controller=>"users/boards"}
    edit_users_board GET    /users/boards/:id/edit(.:format)          {:action=>"edit", :controller=>"users/boards"}
         users_board GET    /users/boards/:id(.:format)               {:action=>"show", :controller=>"users/boards"}

如果我把这个链接带有两个参数:

<% @posts.each do |post| %>
   <%= link_to post.board.name, users_board_path(post.user, post.board) %>
<% end %>

我得到了一个带点的下一个网址:

http://localhost:3000/users/boards/hyperrjas.board-2

  • hyperrjas是我用slug输入的user_id:username。
  • 我使用命名空间,因为它是嵌套资源,我有一个用户面板。

我的问题是:如何在生成的网址中更改斜杠/的点?应该看起来如下工作:

http://localhost:3000/users/boards/hyperrjas/board-2

1 个答案:

答案 0 :(得分:0)

将用户路线移动到嵌套的路线下方。 Rails将首先“捕获”上层路线。

您的问题实际上是路由生成(以及一些订购)。如果您需要访问用户板,则不需要namespaced路由,而是nested路由。

如果您需要/users/:user_id/boards/users/:user_id/boards/:id,则需要嵌套路线。请注意,在第二个路径中有2个参数(user_idid)。如果您使用命名空间路由,则只需“一个”(主板id)。第二个参数是格式。请注意,在rake路由的输出中,您只需“需要”1个参数。

尝试下一个路线,看它是否有效。

  resources :users do
    # This will give you /users/:user_id/posts
    # and /users/:user_id/posts/:post_id
    # among others
    resources :posts
  end