是否有任何为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中实现这个目标?
答案 0 :(得分:1)
您可以使用抽象类并从中继承:
应用/模型/ db.rb 强>
class Db < ActiveRecord::Base
establish_connection :db
self.abstract_class = true
end
应用/模型/ post.rb 强>
class Post < Db
set_table_name :notes
belongs_to :user
end
应用/模型/ user.rb 强>
class User < ActiveRecord::Base
has_many :posts
end
<强>配置/ database.yml的强>
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
db:
adapter: sqlite3
database: db/db.sqlite3
pool: 5
timeout: 5000
在db.sqlite3中只有notes
表。