サードパーティによって開発された Rails 4.1.8 アプリがあります。すでにユーザーモデルでDeviseを使用しています。「私たちについて」などのほとんど静的なページを管理するためだけに Alchemy を使用したいと考えています。
そこで、指示に従って Alchemy CMS 3.1.0-rc1 を既存のアプリにインストールAlchemy.user_class_name
し、初期化子に設定しました。/p/
既存のパスとの衝突を避けるために、とりあえずパスの下に Alchemy をマウントしました。
ログアウト中に Alchemy ページを表示しようとするとapplication.html.erb
、次のエラーがスローされることを除いて、すべて正常に動作しているようです。
undefined method `new_user_session_path' for
#<#<Class:0x007fe4c6833ee0>:0x007fe4cb5b8940>
これは、私のアプリがnew_user_session_path
inを使用しapplication.html.erb
て、ゲスト ユーザーのログイン リンクを表示するために発生します。通常のアプリでは正常に動作し、ログインして Alchemy ページを表示すると正常に動作します。
問題がどこにあるのかを理解するのに十分なほど、私は Devise と Alchemy に精通していません。私はそれが次の2つのいずれかだと推測しています:
- ログインしているユーザーがいない場合、アプリは (User モデルの他のメソッドにアクセスするための) 「ゲスト」ユーザーを作成しており、Devise はこのユーザーを認識していないため、
new_user_session_path
ヘルパーを作成しません。 - ルーティングに問題があります。Alchemy はマウント可能なエンジンであるため、アプリケーション コントローラーに呼び出されないロジックがある可能性があります。
routes.rb 全体またはアプリケーション コントローラーを投稿するのは避けたいと思いますが、前者の関連するデバイス セクションを次に示します。
devise_for :users, :path => "auth", :path_names => { :sign_in => 'login', :sign_out => 'logout',
:password => 'secret', :confirmation => 'verification', :registration => 'register' },
:controllers => {
:registrations => "authentication",
:passwords => "passwords",
:omniauth_callbacks => "omniauth_callbacks",
:sessions => "sessions"
}
devise_scope :user do
# several get/post definitions here to change various urls
end
devise_scope
次のようなカスタム パスを定義しても、#2 ではないと思います。
devise_scope :user do
get 'login', to: 'devise/sessions#new'
end
同じ問題が発生します。メインアプリでは機能し、ユーザーがログインしているときは機能しますが、ゲストユーザーの Alchemy ページでは機能しません。