我正在使用设计宝石处理所有注册和登录的东西。但我还想将用户配置文件添加到我的应用程序中,因此我生成了一个只有show动作的用户控制器。然后我将get 'users/:id' => 'users#show'
添加到routes.rb。事实上,输入/ users / 1有效,但我找不到一种方法来命名路线。 我想要的是是获得类似show_user_path或user_path的内容,以便我可以链接到给定用户的内容并显示该用户的个人资料。
这是我的routes.rb
Pinteresting::Application.routes.draw do
resources :pins
get 'users/:id' => 'users#show'
devise_for :users
root "pins#index"
get "about" => "pages#about"
以下是我用它获得的路线(我突出了我期望的那样的show_user_path):
pins_path GET /pins(.:format) pins#index
POST /pins(.:format) pins#create
new_pin_path GET /pins/new(.:format) pins#new
edit_pin_path GET /pins/:id/edit(.:format) pins#edit
pin_path GET /pins/:id(.:format) pins#show
PATCH /pins/:id(.:format) pins#update
PUT /pins/:id(.:format) pins#update
DELETE /pins/:id(.:format) pins#destroy
#this is the one I want a path! GET /users/:id(.:format) users#show
new_user_session_path GET /users/sign_in(.:format) devise/sessions#new
user_session_path POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session_path DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password_path POST /users/password(.:format) devise/passwords#create
new_user_password_path GET /users/password/new(.:format) devise/passwords#new
edit_user_password_path GET /users/password/edit(.:format) devise/passwords#edit
PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration_path GET /users/cancel(.:format) devise/registrations#cancel
user_registration_path POST /users(.:format) devise/registrations#create
new_user_registration_path GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration_path GET /users/edit(.:format) devise/registrations#edit
PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
root_path GET / pins#index
about_path GET /about(.:format) pages#about
答案 0 :(得分:5)
对于设计,User
不是资源,它只是一个范围。设计关心的是身份验证。
虽然路径嵌套在/user
下,但您会注意到定义的资源实际上是会话,注册,密码...
只需在您的路线中添加resources :users
并创建UsersController
(以及视图)。
如果您不想为用户创建所有资源,并且只能使用user_path(user)
用户get 'users/:id
,则可以使用as
选项命名该路线,例如这样:
get 'users/:id' => 'users#show', as: user
答案 1 :(得分:1)
上面的答案很棒,但我认为值得注意的是,如果你不想创建一个不同的控制器,但想要添加一个动作,比如你从Devise :: RegistrationsController继承你的注册控制器,那么你需要使用devise scope block:
devise_scope :user do
get 'users/:id' => 'registrations#show', as: user
end
答案 2 :(得分:0)
答案应该是这样的:
get 'user/:id' => 'users#show', as: :user