わかりました。アプリで名前空間を使用するときにDeviseを機能させる方法については、さまざまな答えを見てきましたが、どれもうまくいきません。
アプリを3つの名前空間に分割しています
ホーム(公開ランディングページ)アカウント(ログインしているユーザーのプロファイル/アカウント)管理者(まだ作成されていない管理者バックエンド)
また、すべてのパーシャルをbase
各名前空間のフォルダーに分割しました。したがって、私の各コントローラーは、 :BaseController
から継承するから継承します。ApplicationController
module Account
class UsersController < BaseController
end
end
そして、私はsessions_controller.rb
次のようにデバイスセッションコントローラーから継承するアカウントとホームの両方でを作成しました。
module Account
class SessionsController < BaseController < Devise::SessionsController
end
end
目標は、ユーザーがアカウント名前空間にあるユーザーコントローラーにログインできるようにするログイン/登録フォームをホーム名前空間に含めることです。
今、私が生成したリンクをクリックすると、次のようになります。
<%= link_to "register", new_user_registration_path %>
私は得ています
ActionController::RoutingError at /users/sign_up
uninitialized constant Account::RegistrationsController
私のroutes.rbファイルは次のようになります。
scope :module => "account" do
devise_for :users, :controllers => { :sessions => "account/sessions" }
resource :users
end
scope :module => "home" do
resources :home, :about, :jobs, :terms, :privacy, :android_availability, :about, :contact
end
get "home/index"
root :to => 'home::home#index'
end
ホームコントローラーはホームレイアウトを使用し、アカウントコントローラーはアプリケーションレイアウトを使用します。ホームコントローラーで指定しますが、レールが検索するデフォルトのレイアウトはアプリケーションであるため、アカウントコントローラーでlayout "home"
は指定しません。layout "application"
Ok。私はすべての拠点をカバーしたと思います。私がここで間違っていることについて何か考えはありますか?
ありがとう!
編集:
上記registrations_controller.rb
のファイルと同じ方法で、アカウントの名前空間にファイルを追加しました。sessions_controller.rb
routes.rb
また、ファイルを更新しました。
scope :module => "account" do
devise_for :users, :controllers => {
:sessions => "account/sessions",
:registrations => "account/registrations" }
resource :users
end
今、私は理解できない新しいエラーが発生しています。ここにあります:
NoMethodError at /users/sign_up
undefined method `action' for Account::RegistrationsController:Class
未定義のメソッド「アクション」が(gem) actionpack-3.2.11/lib/action_dispatch/routing/route_set.rb
意味をなさないということです。
具体的には、問題はここにあると言います:
def dispatch(controller, action, env)
controller.action(action).call(env)
end
編集2:
これが私のコードですregistrations_controller.rb
module Account
class RegistrationsController < BaseController < Devise::RegistrationsController
end
end
編集3:
module Account
class BaseController < ApplicationController
end
end
わかりました、上記は私のです。これは。base_controller.rb
から継承したものApplicationController
です。他のすべてのコントローラーはから継承しBaseController
ます。アプリを3つの名前空間に分割したので、base_controllerは、名前空間内の他のコントローラーに、パーシャルがbase
名前空間内の名前付きフォルダーにあることを通知するためにあります。このRailsCastに示されているように
BaseController
を含めないと、デバイスコントローラーがパーシャルを見つけることができないため、パーシャルが見つからないというエラーが発生します。