Rails路由,url中的用户名

时间:2015-02-14 11:06:45

标签: ruby-on-rails url routing

我对Rails很陌生,而且我正在开发一个应用程序,我想将用户名放在url,Twitter风格中。

我已经解决了这个路由代码的问题,但是它很快变得非常丑陋,我现在在尝试删除时遇到错误,因为帖子ID丢失了。

必须有更好的方法来做这些路线:

get '/:username', to: 'users#index', as: :username
get '/:username/posts', to: 'posts#index', as: :posts
post '/:username/posts', to: 'posts#create', as: :create_post
delete '/:username/posts', to: 'posts#destroy', as: :delete_post
get '/:username/profile', to: 'profiles#index', as: :profile
patch '/:username/profile', to: 'profiles#update'
get '/:username/friends', to: 'friends#index', as: :friends
get '/:username/settings', to: 'settings#index', as: :settings
get '/:username/groups', to: 'groups#index', as: :groups

非常感谢您提供的任何建议。 :)

更新

在这里找到另一个问题。这似乎让我想去的地方。这会解决我的问题,还是我缺少的东西?

scope ":username" do
  get '', to: 'profiles#show'
  resources :posts
  resources :profile
  resources :friends
end

2 个答案:

答案 0 :(得分:0)

不建议使用:

resources :users 
resources :profiles 
在路线中

等等,因为它遵循RESTful结构。

答案 1 :(得分:0)

考虑使用提供开箱即用的友好id / slug功能的https://github.com/norman/friendly_id,因为在使用这个(友好ID)方法时可能会有一些情况,你没有考虑/测试自己。

另外,您的路线应如下所示:

resources :users, only: [:show, :index, ...] do
    resources :posts, only: :show
    resources :bars, only: [:show, :new]
end