0

サードパーティによって開発された 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_pathinを使用しapplication.html.erbて、ゲスト ユーザーのログイン リンクを表示するために発生します。通常のアプリでは正常に動作し、ログインして Alchemy ページを表示すると正常に動作します。

問題がどこにあるのかを理解するのに十分なほど、私は Devise と Alchemy に精通していません。私はそれが次の2つのいずれかだと推測しています:

  1. ログインしているユーザーがいない場合、アプリは (User モデルの他のメソッドにアクセスするための) 「ゲスト」ユーザーを作成しており、Devise はこのユーザーを認識していないため、new_user_session_pathヘルパーを作成しません。
  2. ルーティングに問題があります。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 ページでは機能しません。

4

1 に答える 1