2015-05-12 56 views
0

TL; DR:我希望有username621/posts/title-of-post代替member/posts/1變更軌道命名空間的路線,個性化的PARAMS航線

id的改變後title是很容易,因爲我用的freindly_id寶石產生的蛞蝓。

但是,我很難路由到個性化的params路線而不是當前的命名空間路線。這是當前的路由:

namespace :member do 
    resources :posts 
end 

我想更換member命名空間用戶的username。所以如果他們的用戶名是user123,路線應該是user123/posts/title-of-post

我認爲這不是非常標準的Rails路由,並試圖尋找類似的問題,但沒有結果。

回答

2

更復雜的routes.rb,加path選項

namespace :member, path: ":user_id" do 
    resources :posts 
end 

應該得到你想要的東西,例如http://localhost:3000/621/posts/1

那麼我們只需要添加friendly_idUserPost把它變成像http://localhost:3000/username621/posts/title-of-post

但是

,你需要通過代碼庫之類的東西member_post_path(post)毛孔並切換到member_post_path(post.user, post)

1

嘗試取出namespace並添加path選項:

resources :posts, path: '/:username/posts/' 

然後,如果你在你的控制器訪問/username621/posts/title-of-post你會看到params[:username] = 'username621'

如果你有形式/something/posts的其他路徑添加它們高於此否則它們將被:username捕獲。

+0

謝謝爲你的答案。我正在嘗試您的解決方案,因爲實際路線比發佈的答案複雜得多,而且需要一些時間。將確認這是否在一段時間內有效。 –