2012-08-17 34 views
2

我在構建一個名爲'products_db'的自己的數據庫的web應用程序。但是我的應用程序必須調用位於數據庫'reviews_db'中的評論,這是另一個系統使用的遺留數據庫,我無法做任何事情,因爲客戶端需要這樣做。Rails 3.2.8 - 在單個Rails應用程序中訪問多個數據庫

所以,幸運的是這兩個數據庫位於相同的SQL Server(MSSQL)。我已經有'activerecord-sqlserver-adapter'工作,但我需要找出一種方法來訪問我的webapp中的'reviews_db'。

reviews_db不遵循任何Rails約定,因爲它是一個遺留系統。

所以,我的類產品:

class Product < ActiveRecord::Base 
    attr_accessible :name, :description, :price 

    has_many :reviews 

end 

而且我的課回顧:

class Review < ActiveRecord::Base 

# THIS CLASS DOESN'T FOLLOW RAILS CONVENTION 
# HOW DO I SET AND MANAGE LEGACY PRIMARY KEY? 
# HOW DO I CONNECT THIS MODEL TO THE OTHER DATABASE? 
# HOW DO I CONNECT THIS MODEL TO THE RIGHT TABLE NAME? 

attr_accessible :rv_tbl_title, :rv_tbl_id, :rv_tbl_text, :rv_tbl_author, :rv_tbl_ref_prod 

has_one :Product, foreign_key: :rv_tbl_author 

end 

是否有它的寶石?在Review類問題中使用什麼解決方案?

回答

3

我不知道如果這第一部分是必要或沒有,但在你的database.yml文件,使通過添加像這樣到最後一個新的連接:

review: 
    adapter: sqlserver 
    database: reviews_db 
    .... put your other configuration info here 

然後在您的評論model review.rb:

class Review < ActiveRecord::Base 
    establish_connection :review 
    self.table_name = "review_table" 
    self.primary_key = "review_id" 
end 

將表名更改爲正確的表,將主鍵更改爲正確的列名。

然後創建一個新的表格/模型,僅用於具有本地引用的評論。所以,你可以把它稱爲ReviewReference

class ReviewReference < ActiveRecord::Base 
    belongs_to :review 
    has_one :product 
end 

,改變你的產品型號,以

class Product < ActiveRecord::Base 
    has_many :reviews, class_name: "ReviewReference" 
end 

這應該讓你走向你的目標很長的路要走。您可能需要最終做的

@reviews = Review.where("some_column = ?", some_value)

@reviews = Review.find_by_sql("Some SQL Here")很多,如果你正在做的更復雜的查詢。

對不起,我的答案不是更具體,我只做過一次。道具乍得福勒的軌道食譜書的概念。

+0

工作得很好。謝謝! – 2012-08-20 03:56:16

相關問題