2012-08-17 83 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

相关问题