2011-06-16 95 views
2

有什麼可以爲Rails 3中的ActiveRecord模型指定不同的模式?以下用於在Rails 2中工作:Rails 3和MySQL中的多個數據庫模式

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

只是爲了澄清...你只是想暫時改變表名或永久改變表名嗎? – Msencenb 2011-06-16 17:10:28

+0

永久性的,如同在這個模型中始終使用合格的表名。 – pazustep 2011-06-16 18:36:19

回答

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 

app/models/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表。