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路由,并尝试寻找类似的问题而没有结果。
答案 0 :(得分:2)
对于更复杂的routes.rb
,请添加path
选项
namespace :member, path: ":user_id" do
resources :posts
end
应该得到你想要的,例如http://localhost:3000/621/posts/1
然后我们只需要将friendly_id添加到User
和Post
,以使其变为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
捕获。