如果我这样做:
rails generate scaffold account/user username
我得到一个看起来像这样的控制器:
class Account::UsersController < ApplicationController
def index
@account_users = Account::User.all
end
...
end
如果我包含帐户模块,那么看起来所有数据库调用都不需要以“Account ::”作为前缀。即。
class Account::UsersController < ApplicationController
include Account
def index
@account_users = User.all #this works because I included the Account Module above
end
...
end
现在,如果我要移动我的
控制器/帐户/ users_controller.rb
文件到:
控制器/ 管理 /account/users_controller.rb
该文件看起来像这样(注意:此次移动后我也更正了我的路线文件):
class Admin::Account::UsersController < ApplicationController
include Account
def index
@account_users = User.all #this call does not work now
end
...
end
但是我收到一个错误,说“未初始化的常量Admin :: Account :: UsersController :: User”
看起来rails试图在“User”模型上进行数据库调用,而前面没有“Account ::”模块。
那么控制器中包含模块的工作原理如何?当我将控制器移动到另一个文件(并将模型保留在生成的脚手架中的相同位置)时,为什么这不起作用,但它适用于脚手架生成的文件?我该如何解决这个问题?
答案 0 :(得分:0)
解析模块的名称是相对于当前模块完成的。尝试将其更改为:
include ::Account
或
include ::Admin::Account
(取决于定义用户模型的模块)
这将告诉ruby查看模块Account
答案 1 :(得分:0)
我想我没有意识到你可以明确要求你想要包含的模块的路径。我在阅读了更多模块之后了解到了这一点......
因此,在控制器类之外添加对“require'county / user'”的显式调用会使控制器中的模块包含在内。