我正在努力在我的Rails应用中支持用户。用户甚至不需要意识到还有其他用户。我不想只使用resources :users
,因为生成的路由是:
users GET /users users#index
POST /users users#create
new_user GET /users/new users#new
edit_user GET /users/:id/edit users#edit
user GET /users/:id users#show
PATCH /users/:id users#update
PUT /users/:id users#update
DELETE /users/:id users#destroy
删除了 (.:format)
以提高可读性。
您必须将用户ID号放在URL中,这样用户才有机会了解其他用户的存在。我想要这些路线:
users GET /users users#index
POST /users users#create
new_user GET /users/new users#new
edit_user GET /users/me/edit users#edit
user GET /users/me users#show
PATCH /users/me users#update
PUT /users/me users#update
DELETE /users/me users#destroy
是。 /users/me
是您的用户的路径,这是您可以获得的唯一用户路径。
但问题在于定义这些路线。这是一个想法:
resources :users, constraints: { id: 'me' }
在User
模型中:
def to_param
'me'
end
但这对我来说似乎过于愚蠢。有更好的想法吗?
答案 0 :(得分:3)
使用Singular Resources你很高兴; - )
定义您的路线:
# config/routes.rb
resources :users, only: [:index, :create, :new]
resource :user, path: '/users/me', only: [:show, :edit, :update, :destroy]
如果您离开/user
选项,您的路线将是单数(path:
)。玩弄选项; - )
您的rake routes
结果应如下所示:
Prefix Verb URI Pattern Controller#Action
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/me/edit(.:format) users#edit
user GET /users/me(.:format) users#show
PATCH /users/me(.:format) users#update
PUT /users/me(.:format) users#update
DELETE /users/me(.:format) users#destroy
您还可以在Rails控制台(rails c
)
2.1.3 :001 > Rails.application.routes.url_helpers.user_path
=> "/users/me"
2.1.3 :002 > Rails.application.routes.url_helpers.edit_user_path
=> "/users/me/edit"
如果您愿意,可以在Singular Resources上复数:user
,但不要忘记设置as:
选项,例如:
# config/routes.rb
resources :users, only: [:index, :create, :new]
resource :users, path: '/users/me', as: 'user', only: [:show, :edit, :update, :destroy]
请查看Rails指南中的注释和警告!这是一段摘录:
长期存在的错误会阻止form_for自动使用单一资源。 ...