Разработанный метод контроллера не найден с использованием Alchemy CMS

У меня есть приложение Rails 4.1.8, которое было разработано третьей стороной; он уже использует Devise с моделью User. Я хочу использовать Alchemy просто для управления несколькими в основном статичными страницами, такими как "о нас" и т. Д.

Поэтому я следовал инструкциям по установке Alchemy CMS 3.1.0-rc1 в существующее приложение и установил Alchemy.user_class_name в инициализаторе. Я установил алхимию под /p/ путь на данный момент, чтобы избежать столкновений с моими существующими путями.

Кажется, все работает нормально, за исключением того, что когда я пытаюсь просмотреть страницу Алхимии во время выхода из системы, мой application.html.erb выдает следующую ошибку:

undefined method `new_user_session_path' for
#<#<Class:0x007fe4c6833ee0>:0x007fe4cb5b8940>

Это происходит потому, что мое приложение использует new_user_session_path в application.html.erb, чтобы показать ссылку входа в систему для гостевого пользователя. В обычном приложении он работает нормально, а также отлично работает, когда я просматриваю страницу Алхимии при входе в систему.

Я не достаточно знаком с Devise и Alchemy, чтобы понять, где существует проблема. Я предполагаю, что это одна из двух вещей:

  1. когда зарегистрированный пользователь отсутствует, приложение создает "гостевого" пользователя (для доступа к другим методам в модели пользователя), и 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

Я не думаю, что это № 2, потому что даже если я определю devise_scope для пользовательского пути, например:

devise_scope :user do
  get 'login', to: 'devise/sessions#new'
end

Я получаю ту же проблему: он работает в основном приложении, и когда пользователи входят в систему, но не на страницах Алхимии с гостевым пользователем.

1 ответ

Решение

Общая проблема маршрутизации прокси. Поскольку представления Alchemy не знают маршрутов ваших основных приложений, вам необходимо использовать объект прокси маршрутизации main_app.

Поэтому вызов main_app.new_user_session_path должен решить вашу проблему.

Подробнее о маршрутах в движках читайте в этом руководстве по Rails: http://guides.rubyonrails.org/engines.html

Другие вопросы по тегам