我有一些命名空间模型,我试图覆盖它们的默认rails表名,因为我正在连接到现有的旧数据库。
我的模特是:
/app/models/licenses.rb
module Licenses
def self.table_name_prefix
''
end
end
/app/models/licenses/employee.rb
class Licenses::Employee < ActiveRecord::Base
establish_connection YAML::load(File.open("#{Rails.root}/config/licenses_database.yml"))[Rails.env]
self.table_name = 'EMPLOYEE'
self.primary_key = 'EMPLOYEE_ID'
end
/app/models/licenses/inspection.rb
class Licenses::Inspection < ActiveRecord::Base
establish_connection YAML::load(File.open("#{Rails.root}/config/licenses_database.yml"))[Rails.env]
self.table_name = 'INSPECTION'
self.primary_key = 'INSPECTION_ID'
end
当我运行测试时,会产生错误
PG ::错误:错误:关系“licenses_employees”没有 存在
我是否缺少从命名空间模型中删除前缀的东西?
更新:我已尝试将许可证模块中的表名前缀设置为'testing_'而不是'',我仍然会收到相同的错误消息。
答案 0 :(得分:2)
看来手头的问题是我使用rails生成器为现有数据库创建命名空间模型。生成器已将夹具文件创建为命名空间夹具,即/test/fixtures/licenses/employees.yml
。当我尝试运行测试时,Rails会尝试根据灯具名称/路径将灯具插入表格中。我只需要移动现有数据库的fixture文件并重命名它们以匹配我在模型中设置的表名/test/fixtures/licenses/employee.yml
。