我有一个外部库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
这样至少可以减少代码重复。有没有一种方法可以让我更容易,更容易弄乱?