我在 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
我的问题是:如何在生成的网址中更改斜杠/的点?应该看起来如下工作:
答案 0 :(得分:0)
将用户路线移动到嵌套的路线下方。 Rails将首先“捕获”上层路线。
您的问题实际上是路由生成(以及一些订购)。如果您需要访问用户板,则不需要namespaced
路由,而是nested
路由。
如果您需要/users/:user_id/boards
和/users/:user_id/boards/:id
,则需要嵌套路线。请注意,在第二个路径中有2个参数(user_id
和id
)。如果您使用命名空间路由,则只需“一个”(主板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