我在 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 路:
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"}
如果我将此链接与 2 个参数放在一起:
<% @posts.each do |post| %>
<%= link_to post.board.name, users_board_path(post.user, post.board) %>
<% end %>
我得到下一个带点的 url:
http://localhost:3000/users/boards/hyperrjas.board-2
- hyperrjas 是我放在 slug :username 中的 user_id。
- 我使用命名空间是因为是嵌套资源,而且我有一个供用户使用的面板。
我的问题是:如何在我生成的 url 中更改斜杠/的点?应该如下所示:
最佳答案
将用户路由移至嵌套路由下方。 Rails 将首先“捕捉”上层路线。
您的问题实际上是路线生成(以及一些排序)。如果您需要访问用户板,则不需要命名空间
路由,而是嵌套
路由。
如果您需要 /users/:user_id/boards
和 /users/:user_id/boards/:id
您将需要嵌套路由。请注意,在第二条 route 有 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
关于ruby-on-rails - 带有命名空间 rails 3.1 的 URL 路由中的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8806981/