【问题标题】:ActionController::RoutingError (No route matches [GET] "/users/sign_up")ActionController::RoutingError (没有路由匹配 [GET] "/users/sign_up")
【发布时间】:2012-08-02 15:04:14
【问题描述】:

我正在使用 devise 来管理我的 rails 应用程序中的用户帐户。它在我的开发环境中运行良好。我刚刚推送到 Heroku,当我导航到 /users/sign_up 页面(用户/sign_in 正在工作)时,我得到“您正在寻找的页面不存在”。我检查了日志并得到:

ActionController::RoutingError (No route matches [GET] "/users/sign_up")

我的 routes.rb 是:

  get "home/index"

  get "deals/new"
  get "deals/all"

  resources :deals

  devise_for :users

  root :to => "home#index"

知道出了什么问题吗?

谢谢

更新:

路线是:

              home_index GET    /home/index(.:format)          home#index
               deals_new GET    /deals/new(.:format)           deals#new
               deals_all GET    /deals/all(.:format)           deals#all
                   deals GET    /deals(.:format)               deals#index
                         POST   /deals(.:format)               deals#create
                new_deal GET    /deals/new(.:format)           deals#new
               edit_deal GET    /deals/:id/edit(.:format)      deals#edit
                    deal GET    /deals/:id(.:format)           deals#show
                         PUT    /deals/:id(.:format)           deals#update
                         DELETE /deals/:id(.:format)           deals#destroy
        new_user_session GET    /users/sign_in(.:format)       devise/sessions#new
            user_session POST   /users/sign_in(.:format)       devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy
           user_password POST   /users/password(.:format)      devise/passwords#create
       new_user_password GET    /users/password/new(.:format)  devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format) devise/passwords#edit
                         PUT    /users/password(.:format)      devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)        devise/registrations#cancel
       user_registration POST   /users(.:format)               devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)       devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)          devise/registrations#edit
                         PUT    /users(.:format)               devise/registrations#update
                         DELETE /users(.:format)               devise/registrations#destroy
                    root        /                              home#index

更新

我在 heroku 上 rake 路由,结果非常不同。

home_index GET    /home/index(.:format)     home#index
 deals_new GET    /deals/new(.:format)      deals#new
 deals_all GET    /deals/all(.:format)      deals#all
     deals GET    /deals(.:format)          deals#index
           POST   /deals(.:format)          deals#create
  new_deal GET    /deals/new(.:format)      deals#new
 edit_deal GET    /deals/:id/edit(.:format) deals#edit
      deal GET    /deals/:id(.:format)      deals#show
           PUT    /deals/:id(.:format)      deals#update
           DELETE /deals/:id(.:format)      deals#destroy
      root        /                         home#index

似乎没有设置设计。我做错了什么?

【问题讨论】:

  • 使用rake routes查看您的路线,非常有用!
  • rake routes 的输出是什么?
  • @CambridgeMike 我添加了路线更新
  • 在您的视图/控制器中,您是否正在调用 new_user_session_path?
  • 我没有修改设计控制器,我直接去url。

标签: ruby-on-rails routing devise


【解决方案1】:

在设计用户模型中 :registerable 没有为生产环境设置,但它是为本地环境设置的。这就是为什么它在本地工作而不会在 Heroku 上工作的原因。

【讨论】:

    【解决方案2】:

    我不确定默认情况下应该使用“用户”模型和“sign_up”什么样的东西,但如果你有一个名为 sign_up 的控制器方法,那么你可以添加

    get "users/sign_up"
    

    到 routes.rb

    如果您要用于 sign_up 的方法称为“创建”之类的名称,请尝试

    match 'sign_up', :to => 'users#create'
    

    【讨论】:

      【解决方案3】:

      抱歉,我忽略了您使用设计的全部要点。 我认为注册路线应该是'/registration/sign_up'

      要定义自己的路线,请在 routes.rb 中尝试

      devise_scope :user do
        get "/sign_up" => "devise/registrations#new"
      end
      

      【讨论】:

      • 谢谢。我仍然收到:ActionController::RoutingError(没有路由匹配 [GET] "/users/sign_up"):
      • 是的,尝试像 Mike 刚才所说的那样运行 rake 路由,然后在您的 link_to 的 sign_up 页面中,只需使用路由名称进行注册并在末尾添加 _path。类似于:link_to“注册”,registration_new_path
      • 我没有使用link_to 我直接去URL(只是在地址栏中输入)
      • 你试过重启你的服务器吗?我真的不明白这怎么行不通..
      【解决方案4】:
      devise_for :users, :path_names => {
         :sign_in => 'signin',
         :sign_out => 'signout',
         :sign_up => 'signup'
        },
      

      【讨论】:

      • 您是否覆盖了任何设计控制器?这是唯一出错的路线?
      • 我正在覆盖视图,但没有任何控制器。 sigh_out 似乎也发生了这种情况。 sign_in 和我尝试过的其他方法都在工作。
      • 而这只发生在生产环境中?您可以发布导致此错误的链接的代码吗?
      • 哦,顺便说一句,我上面的解决方案去掉了下划线,所以尝试用户/注册
      【解决方案5】:

      在你的 routes.rb 文件中添加:

           resource:users
      

      之后做 rake 路由,看看它是否存在。

      【讨论】:

        猜你喜欢
        • 2017-03-21
        • 1970-01-01
        • 1970-01-01
        • 2018-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多