【问题标题】:Devise with Rails 4: user show route doesn't exist使用 Rails 4 设计:用户显示路线不存在
【发布时间】:2013-10-17 19:29:52
【问题描述】:

我正在使用设计 gem 来处理所有注册和登录的事情。但我也想将用户配置文件添加到我的应用程序中,所以我生成了一个只有一个显示操作的用户控制器。然后我在 routes.rb 中添加了get 'users/:id' => 'users#show'。事实上,输入 /users/1 有效,但我找不到命名路线的方法。 我想要的是获得类似 show_user_path 或 user_path 的东西,这样我就可以链接到给定用户的内容并显示该用户的个人资料。

这是我的路线.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

【问题讨论】:

    标签: ruby-on-rails devise ruby-on-rails-4


    【解决方案1】:

    对于设计,User 不是资源,它只是一个范围。设计关心的是身份验证。

    虽然路径嵌套在/user 下,但您会注意到定义的资源实际上是诸如会话、注册、密码之类的东西...

    只需在您的路线中添加resources :users 并创建UsersController(和视图)。

    如果您不想为用户创建所有资源并且只能使用get 'users/:id 来使用user_path(user),则可以使用as 选项命名该路由,如下所示:

    get 'users/:id' => 'users#show', as: user
    

    【讨论】:

    • 成功了!非常感谢
    【解决方案2】:

    上面的答案很好,但我认为这里值得注意的是,如果您不想创建不同的控制器,但想向从 Devise::RegistrationsController 继承的注册控制器添加操作, 那么你需要使用devise scope block:

    devise_scope :user do
      get 'users/:id' => 'registrations#show', as: user
    end
    

    【讨论】:

      【解决方案3】:

      答案应该是这样的:

      get 'user/:id' => 'users#show', as: :user
      

      【讨论】:

      • 它与上面接受的答案有何不同?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      相关资源
      最近更新 更多