我正在构建一个拥有自己的数据库'products_db'的webapp。但是我的应用程序必须调用位于数据库'reviews_db'中的评论,这是另一个系统使用的遗留数据库,我无法做任何事情,因为客户端希望这样做。
所以,幸运的是,这两个db都位于同一个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课程问题中使用的解决方案是什么?
答案 0 :(得分:3)
我不确定这个第一部分是否必要,但是在你的database.yml文件中,通过添加这样的内容来建立新的连接:
review:
adapter: sqlserver
database: reviews_db
.... put your other configuration info here
然后在你的评论模型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")
如果您正在进行更复杂的查询。
抱歉,我的回答并不是更具体,我只做了一次。乍得福勒的Rails食谱推荐这本概念。