【发布时间】:2011-06-17 04:02:14
【问题描述】:
在 Rails 3 中是否可以为 ActiveRecord 模型指定不同的模式?以下曾经在 Rails 2 中工作:
class Company < ActiveRecord::Base
set_table_name "hr.company"
end
这在 Rails 3 中失败并显示消息 Table myapp.hr.company doesn't exist。
以下适用于简单模型:
class Company < ActiveRecord::Base
establish_connection "hr"
set_table_name "company"
end
这种方法的问题是双重的:首先,Rails 为这个模型创建了一个单独的数据库连接,增加了额外的开销。其次,现在所有查询都在此连接的上下文中调用,这意味着任何返回到 myapp 架构的连接都将中断:
class Company < ActiveRecord::Base
establish_connection "hr"
set_table_name "company"
has_many :widgets # widgets table resides in myapp schema
end
这反过来会以Table hr.widgets doesn't exist 失败。
那么,有什么方法可以在 Rails 3 中实现这一点吗?
【问题讨论】:
-
澄清一下……您是要临时更改表名还是永久更改表名?
-
永久,如中,限定的表名应始终用于此模型。
标签: mysql ruby-on-rails ruby-on-rails-3