Rails的路由帮助

问题描述:

我希望用户帖子的网址是这样的:Rails的路由帮助

example.com/users/username/post-name

我应该如何设置呢?

目前,桩模型包含:

def to_param 
    name.parameterize 
end 

(以连字符连接相应的职位名称)

routes.rb中包含:

map.resources :users 
    map.resources :posts 

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

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

还增加

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

一种方式更多:

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(任行动)

+0

在这种情况下,如果您访问像/ users/first/second这样的路由,那么params [:name] = second和params [:user_id] = first – Bohdan 2010-08-18 13:21:52

这to_param看起来不错,但像你想的内置佣工不链接到嵌套的资源,你必须使用user_post_path(user, post)。当然,你可以写你自己的post_path辅助方法,它可以按你想要的方式工作。

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

这几乎工作。它给了我一个像/ users/username/posts/post-name这样的网址。我不希望url的'posts'部分存在。 – amaseuk 2010-08-18 10:43:54

嗨为了使应用程序识别像

example.com/users/username/post-name 

路线,你应该添加到您的routes.rb

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

然后你就可以访问params[:username]params[:post]您的控制器内部test行动你应在0​​之后但在map ':controller/:action/:id'之前定义它,但您必须编写自己的帮助呃那么