2010-08-18 120 views
1

我希望用戶帖子的網址是這樣的: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 

回答

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

+0

在這種情況下,如果您訪問像/ users/first/second這樣的路由,那麼params [:name] = second和params [:user_id] = first – Bohdan 2010-08-18 13:21:52

0

這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

1

嗨爲了使應用程序識別像

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'之前定義它,但您必須編寫自己的幫助呃那麼