【问题标题】:Setting table name in namespace model在命名空间模型中设置表名
【发布时间】:2012-09-26 18:55:00
【问题描述】:

我有一些命名空间模型,我正在尝试为它们覆盖默认的 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::Error: ERROR: 关系“licenses_employees”不 存在

我是否缺少从命名空间模型中删除前缀的内容?

更新:我尝试将许可证模块中的表名前缀设置为“testing_”而不是“”,但仍然收到相同的错误消息。

【问题讨论】:

    标签: namespaces ruby-on-rails-3.2 testunit legacy-database


    【解决方案1】:

    目前的问题似乎是我使用 rails 生成器为现有数据库创建命名空间模型。生成器已将夹具文件创建为命名空间夹具,即/test/fixtures/licenses/employees.yml。当我尝试运行测试时,Rails 会尝试根据夹具名称/路径将夹具插入表中。我只需要移动现有数据库的夹具文件并重命名它们以匹配我在模型中设置的表名,即/test/fixtures/licenses/employee.yml

    【讨论】:

    • 感谢您的解决方案!但是,当我运行测试时,现在我收到错误消息,提示“ActiveRecord::StatementInvalid: PG::Error: ERROR: null value in column "created_at" 违反了非空约束”。你能解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 2012-09-10
    • 2011-08-16
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多