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

标签 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 路:

  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 中更改斜杠/的点?应该如下所示:

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

最佳答案

将用户路由移至嵌套路由下方。 Rails 将首先“捕捉”上层路线。

您的问题实际上是路线生成(以及一些排序)。如果您需要访问用户板,则不需要命名空间 路由,而是嵌套 路由。

如果您需要 /users/:user_id/boards/users/:user_id/boards/:id 您将需要嵌套路由。请注意,在第二条 route 有 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

关于ruby-on-rails - 带有命名空间 rails 3.1 的 URL 路由中的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8806981/

相关文章:

ruby-on-rails - 如何在查询中使用数组字段匹配 mongoid 文档?

ruby-on-rails - 在不同主机上链接 Rails 应用程序和 Wordpress 博客

c++ - 如何在 C++ 中使用 namespace::function 选择函数的单个重载?

python - 为什么 tkinter 模块在通过命令行运行时会引发属性错误,而在通过 IDLE 运行时却不会?

ruby-on-rails - 使用 prawn 时显示未初始化的常量 Prawn::FLOAT_PRECISION 错误

ruby-on-rails - rails 3 : Call back for when a certain object is pulled from the database (Mongo Mapper)

ruby-on-rails - 通过youtube_it gem 查询YouTube上的可嵌入视频

mysql - 如何将 FactoryGirl 与 ActiveRecord 事务轨结合使用

ruby-on-rails-3 - 使用 Rails 3 时如何更新 Rack ? Bundler不会让我!

xml - 在哪里可以找到命名空间 = http ://www. w3.org/1999/XSL/Format 的 xsi 架构