【问题标题】:Rails 3.2.8 - Multiple database access within one single Rails AppRails 3.2.8 - 一个 Rails 应用程序中的多个数据库访问
【发布时间】:2012-08-17 17:46:10
【问题描述】:

我正在构建一个 web 应用程序,它有自己的名为“products_db”的数据库。但是我的应用程序必须调用位于数据库“reviews_db”中的评论,这是另一个系统正在使用的遗留数据库,我无能为力,因为客户希望这样。

所以,幸运的是,两个数据库都位于同一个 SQL Server (MSSQL) 中。我已经让 te '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

有宝石吗?在复习课问题中使用什么解决方案?

【问题讨论】:

    标签: sql-server database ruby-on-rails-3 activerecord


    【解决方案1】:

    我不确定这第一部分是否必要,但在您的 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") 如果您正在执行更复杂的查询。

    抱歉,我的回答不够具体,我只做过一次。支持 Chad Fowler 的 Rails 食谱书的概念。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 2012-05-29
      相关资源
      最近更新 更多