/ /初期化されていない定数Users :: Auth :: Instagram :: CallbackController - 設定のどの部分が正しくないのかわからない - ruby​​-on-rails、ruby-on-rails-3、工夫

初期化されていない定数Users :: Auth :: Instagram :: CallbackController - 設定のどの部分が間違っているかわからない - ruby​​-on-rails、ruby-on-rails-3、devise

私は使用しています 考案する そして実装し始めた omn​​iauth-instagram。 しかし、私は読んでエラーが出続けます:

uninitialized constant Users::Auth::Instagram::CallbackController

私は自分の設定のどの部分が間違っているのかわからないので、自分のroutes.db、omniauth_callbacks_controllers.rb、およびdevise.rbからの抜粋を参考のために含めました。

正しい方向への任意のポイントは大歓迎です!

routes.db
devise_for :users, :controllers => { :omniauth_callbacks => "users/auth/instagram/callbacks" }

/controllers/users/omniauth_callbacks_controllers.rb

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController

def instagram

# You need to implement the method below in your model (e.g. app/models/user.rb)
@user = User.find_for_oauth(request.env["omniauth.auth"], current_users)

if @user.persisted?
sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
set_flash_message(:notice, :success, :kind => "Instagram") if is_navigational_format?
else
session["devise.instagram_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end

end

end

devise.rb
config.omniauth_path_prefix = "users/auth/instagram/callbacks"

回答:

回答№1は0

命名規則が間違っていることに気付きました。

助けを借りて この前の質問、私は私のファイル名が私のルートとパスが参照していたクラス名と一致しないことに気づきました。

たとえば、routes.rbとdevise.rbはどちらもpathを参照していました。
"users/auth/instagram/callbacks"

前後の私のクラスファイル名:
users/auth/instagram/omniauth_callbacks_controllers.rb
users/auth/instagram/callbacks_controllers.rb

私の中のクラス名が callbacks_controllers.rb また、適切に、ファイルのパスを反映します。
class Users::Auth::Instagram::CallbacksController


回答№2の場合は0

あなたのdevise.rbを見れば:

config.omniauth_path_prefix = "users/auth/instagram/callbacks"

そしてあなたのroutes.rb:

devise_for :users, :controllers => { :omniauth_callbacks => "users/auth/instagram/callbacks" }

両方を指す Users::Auth::Instagram::CallbacksController

あなたが定義している間:

class Users::OmniauthCallbacksController

内部 /controllers/users/omniauth_callbacks_controllers.rb

これはする必要があります: /controllers/users/auth/instagram/callbacks_controllers.rb

そしてあなたのクラスは次のように変わるはずです。

class Users::Auth::Instagram::CallbackController < Devise::OmniauthCallbacksController

または削除する /auth 両方(routes.rbとdevise.rb)から場所とそれが動作するかどうかを確認しますか?