我正在尝试在以下位置创建控制器:
app/controllers/admin/account/users_controller.rb
我的模型在:
app/models/account/user.rb
所需的表名是“account_users”。
如果我运行:
rails g scaffold account/user username:string
然后脚手架正确生成文件,一切正常。我现在将我的控制器和查看用户文件放入管理文件夹(我省略了视图,因为问题与控制器和模型有关):
scaffold generated: app/controllers/account/users_controller.rb
relocated: app/controllers/admin/account/users_controller.rb
在控制器中,我必须修改以下内容:
scaffold generated: class Account::UsersController < ApplicationController
modified: class Admin::Account::UsersController < ApplicationController
我将路线更改为:
namespace :admin do
namespace :account do
resources :users
end
end
到目前为止一切顺利,当我转到 localhost:3000/admin/account/users 时一切正常
我现在正试图干掉我的控制器,每个数据库调用都以“Account::”模块为前缀。它看起来像这样:
class Admin::Account::UsersController < ApplicationController
def index
@account_users = Account::User.all
end
当我将控制器更改为:
class Admin::Account::UsersController < ApplicationController
include Account
def index
@account_users = User.all
end
我收到一条错误消息,说“用户”是一个未初始化的常量。我的第一个想法是找不到帐户模块。我的帐户模块如下所示(app/models/account.rb):
module Account
def self.table_name_prefix
'account_'
end
end
我在这个模块中写了一些调试代码,它正在执行,所以看起来 Account 模块包含在控制器中。
我认为控制器没有识别“account_”前缀,并认为当我调用 User.all 时,它实际上是在寻找用户表而不是 account_users 表。
所以我的问题是,有谁知道在为模型和控制器使用不同的文件夹结构时是否可以在控制器中包含模块?
我正在使用 Rails 4.0 和 Ruby 2.0.0。如果有人可以提供帮助,谢谢!