将Rails命名空间路由更改为个性化params路由

时间:2015-05-12 03:05:21

标签: ruby-on-rails routing rails-routing

TL; DR:我希望username621/posts/title-of-post代替member/posts/1

将帖子id更改为帖子title很容易,因为我使用freindly_id gem来生成slu ..

但是,我很难路由到个性化的params路由而不是当前的命名空间路由。这是当前的路由:

namespace :member do
    resources :posts
end

我想将member命名空间替换为用户的username。因此,如果用户名为user123,则路由应为user123/posts/title-of-post

我认为这不是非常标准的Rails路由,并尝试寻找类似的问题而没有结果。

2 个答案:

答案 0 :(得分:2)

对于更复杂的routes.rb,请添加path选项

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

应该得到你想要的,例如http://localhost:3000/621/posts/1

然后我们只需要将friendly_id添加到UserPost,以使其变为http://localhost:3000/username621/posts/title-of-post

但是,您需要在代码库中查找member_post_path(post)之类的内容并更改为member_post_path(post.user, post)

答案 1 :(得分:1)

尝试删除namespace并添加path选项:

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

然后,如果您在控制器中访问/username621/posts/title-of-post,则会看到params[:username] = 'username621'

如果您有/something/posts形式的其他路径,请将它们添加到此路线之上,否则它们将被:username捕获。