0

我有一个由第三方开发的 Rails 4.1.8 应用程序;它已经将设计与用户模型一起使用。我想使用 Alchemy 来管理一些主要是静态的页面,比如“关于我们”等。

所以我按照将 Alchemy CMS 3.1.0-rc1 安装到现有应用程序中的说明进行操作,并Alchemy.user_class_name在初始化程序中进行设置。我现在将 Alchemy 安装在/p/路径下,以避免与现有路径发生冲突。

一切似乎都工作正常,除了当我在注销时尝试查看 Alchemy 页面时,我application.html.erb会抛出以下错误:

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

发生这种情况是因为我的应用程序使用new_user_session_pathinapplication.html.erb来为来宾用户显示登录链接。在常规应用程序中,它运行良好,当我在登录时查看 Alchemy 页面时也运行良好。

我对设计和炼金术不够熟悉,无法找出问题所在。我猜这是两件事之一:

  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

我不认为这是#2,因为即使我devise_scope为自定义路径定义了一个,例如:

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

我遇到了同样的问题:它在主应用程序中以及当用户登录时有效,但在具有来宾用户的 Alchemy 页面上无效。

4

1 回答 1

2

常见的rails路由代理问题。由于 Alchemy 视图不知道您的主要应用程序路由,因此您需要使用“main_app”路由代理对象。

所以调用'main_app.new_user_session_path'应该可以解决你的问题。

在此 Rails 指南中阅读有关引擎中路由的更多信息:http: //guides.rubyonrails.org/engines.html#routes

于 2015-02-18T21:19:10.110 回答