在外部库Rails中设置数据库名称的最佳方法

时间:2015-12-14 20:21:40

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我有一个外部库FooModels,它只是属于test-Foo,dev-Foo或Foo数据库的activerecord模型的集合,具体取决于rails环境。当我的Foo项目的database.yml可以覆盖它时,这很容易处理。

我遇到的问题是当我将它们包含在项目栏中时,默认的database.yml连接是数据库栏我需要在我的测试环境中指定Foo表数据库是test-Foo,dev -Foo在我的开发环境中,而Foo在我的生产环境中。

在我的每个Foo模型中,我都能做到:

self.table_name = 'test-Foo.table_name' if Rails.env = 'test'
self.table_name = 'dev-Foo.table_name'  if Rails.env = 'development'
self.table_name = 'Foo.table_name'      if Rails.env = 'production'

但这似乎是一种处理它的糟糕方式。我看起来有点让我的类来自一个继承ActiveRecord :: Base的抽象模型,例如:

class BaseConnection < ActiveRecord::Base
  self.abstract_class = true
  attr_accessor :database

  @database = case Rails.env
    when 'test' then 'test-Foo'
    ...
end

class SomeTable < BaseConnection
  self.table_name = "#{@database}.some_table"
  ...
end

这样至少可以减少代码重复。有没有一种方法可以让我更容易,更容易弄乱?

0 个答案:

没有答案