【问题标题】:Rails routing helpRails 路由帮助
【发布时间】:2010-08-18 10:19:46
【问题描述】:

我希望用户帖子的网址是这样的:

example.com/users/username/post-name

我应该如何设置?

目前,post模型包含:

def to_param
    name.parameterize
end 

(相应地连接帖子名称)

routes.rb 包含:

  map.resources :users
  map.resources :posts

最好我想说 post_path(post) ,这将通过自动查找 post.user 为我生成适当的路径。

我需要做些什么才能做到这一点?

也添加了

map.resources :users do |user|
    user.resources :posts
end

【问题讨论】:

    标签: ruby-on-rails url routes


    【解决方案1】:

    多一种方式:

    map.resources :users do |user|
      user.connect ':name/:action', :controller => 'posts', :defaults => {:action => 'show'}
    end 
    

    可用路线:
    example.com/users/username/post-name
    example.com/users/username/post-name/edit(任何操作)

    【讨论】:

    • 在这种情况下,如果您访问 /users/first/second 这样的路由,则 params[:name] = second 和 params[:user_id] = first
    【解决方案2】:

    您好,让您的应用程序识别类似的路由

    example.com/users/username/post-name
    

    你应该添加到你的 routes.rb

     map.connect 'users/:username/:post', :controller => "users", :action => "test"
    

    然后你可以在你的控制器test操作中访问params[:username]params[:post]你应该在map.resources :users之后但在map ':controller/:action/:id'之前定义它,但是你必须编写自己的帮助程序

    【讨论】:

      【解决方案3】:

      to_param 看起来不错,但内置帮助程序不会像您想要的那样链接到嵌套资源,您必须使用 user_post_path(user, post)。当然,您可以编写自己的 post_path 帮助方法,它确实可以按照您想要的方式工作。

      def post_path(post)
        url_for [post.user, post]
      end
      

      【讨论】:

      • 这几乎可以工作。它给了我一个像 /users/username/posts/post-name 这样的 url。我不希望网址的“帖子”部分存在。