2

「products_db」という独自のデータベースを持つ webapp を構築しています。しかし、私のアプリは、データベース「reviews_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

それのための宝石はありますか?復習クラスの質問で使用する解決策は何ですか?

4

1 に答える 1

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")より複雑なクエリを実行している場合。

申し訳ありませんが、私の答えはより具体的ではありません。これは一度しか行っていません。Chad Fowler の Rails Recipes ブックのコンセプトの小道具。

于 2012-08-17T21:30:58.690 に答える