路由在编辑控制器时不会改变

Routes not changing upon editing controller

我正在配置设计以与两个 omniauth 提供商一起工作:twitter 和 github。首先实现了 github,我在 OmniauthCallbacksController 中创建了一个 github 方法。后来决定我也想使用 Twitter,我重新配置了我的控制器,放弃了 github 方法,转而支持两个提供者的更复杂的实现。

问题是当我运行rake routes时,旧的github方法就全部出现了,看来我的改变甚至连控制器都没有被识别出来。我什至可以从控制器中删除所有内容,而我的 rake routes 结果保持不变。我在下面附上了相关文件。非常感谢您给我的任何见解。

我的路由文件如下(注意现在不存在的 users/omniauth_callbacks#github 方法的存在):

Rails.application.routes.draw do

  resources :issues
  resources :submissions
  resources :home

  devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
  match '/users/:id/finish_signup' => 'users#finish_signup', via: [:get, :patch], :as => :finish_signup

  root to: "home#index"
end

当我 运行 rake:routes 时,我得到以下信息:

$ rake routes
                        Prefix Verb      URI Pattern                           Controller#Action
                        issues GET       /issues(.:format)                     issues#index
                               POST      /issues(.:format)                     issues#create
                     new_issue GET       /issues/new(.:format)                 issues#new
                    edit_issue GET       /issues/:id/edit(.:format)            issues#edit
                         issue GET       /issues/:id(.:format)                 issues#show
                               PATCH     /issues/:id(.:format)                 issues#update
                               PUT       /issues/:id(.:format)                 issues#update
                               DELETE    /issues/:id(.:format)                 issues#destroy
                   submissions GET       /submissions(.:format)                submissions#index
                               POST      /submissions(.:format)                submissions#create
                new_submission GET       /submissions/new(.:format)            submissions#new
               edit_submission GET       /submissions/:id/edit(.:format)       submissions#edit
                    submission GET       /submissions/:id(.:format)            submissions#show
                               PATCH     /submissions/:id(.:format)            submissions#update
                               PUT       /submissions/:id(.:format)            submissions#update
                               DELETE    /submissions/:id(.:format)            submissions#destroy
                    home_index GET       /home(.:format)                       home#index
                               POST      /home(.:format)                       home#create
                      new_home GET       /home/new(.:format)                   home#new
                     edit_home GET       /home/:id/edit(.:format)              home#edit
                          home GET       /home/:id(.:format)                   home#show
                               PATCH     /home/:id(.:format)                   home#update
                               PUT       /home/:id(.:format)                   home#update
                               DELETE    /home/:id(.:format)                   home#destroy
user_github_omniauth_authorize GET|POST  /users/auth/github(.:format)          users/omniauth_callbacks#passthru
 user_github_omniauth_callback GET|POST  /users/auth/github/callback(.:format) users/omniauth_callbacks#github
              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
                               PATCH     /users/password(.:format)             devise/passwords#update
                               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
                               PATCH     /users(.:format)                      devise/registrations#update
                               PUT       /users(.:format)                      devise/registrations#update
                               DELETE    /users(.:format)                      devise/registrations#destroy
                 finish_signup GET|PATCH /users/:id/finish_signup(.:format)    users#finish_signup
                          root GET       /                                     home#index

我的新 Oauth 回调控制器如下所示:

class OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def self.provides_callback_for(provider)
    class_eval %Q{
      def #{provider}
        @user = User.find_for_oauth(env["omniauth.auth"], current_user)

        if @user.persisted?
          sign_in_and_redirect @user, event: :authentication
          set_flash_message(:notice, :success, kind: "#{provider}".capitalize) if is_navigational_format?
        else
          session["devise.#{provider}_data"] = env["omniauth.auth"]
          redirect_to new_user_registration_url
        end
      end
    }
  end

  [:twitter, :github].each do |provider|
    provides_callback_for provider
  end

  def after_sign_in_path_for(resource)
    if resource.email_verified?
      super resource
    else
      finish_signup_path(resource)
    end
  end
end

想通了!事实证明问题不在于我发布的任何文件。在 User 模型中,我有以下行:omniauth_providers: [:github] I needed to add twitter to it.