2012-04-09 7 views
1

Rails 3アプリでレガシーデータ移行用に追加のMySQLデータベースが設定されています。Rails app、foreign_keyカラムがMySQLで不明

class LegacySize < External 

    set_table_name 'size' 
    set_primary_key 'size_id' 
    belongs_to :product, :class_name => 'LegacyProduct', :foreign_key => 'product_id' 

end 

class LegacyProduct < External 

    set_table_name 'product' 
    set_primary_key 'product_id' 
    has_many :sizes, :class_name => 'LegacySize' 

end 

は、いくつかの簡単なActiveRecordのクエリで罰金ルックス:

class External < ActiveRecord::Base 
    self.abstract_class = true 
    establish_connection :legacy 
end 

はこのクラスを継承する二つのモデルがあります:私は簡単にこのクラスを介して接続することができ

> ls = pp LegacySize.all 
    LegacySize Load (0.8ms) SELECT `size`.* FROM `size` 
[#<LegacySize size_id: 1, name: "small", product_id: 1>, 
#<LegacySize size_id: 2, name: "medium", product_id: 1>, 
#<LegacySize size_id: 3, name: "large", product_id: 1>] 

> lp = pp LegacyProduct.all 
    LegacyProduct Load (0.7ms) SELECT `product`.* FROM `product` 
[#<LegacyProduct product_id: 1, name: "shirt", price: 10.0>] 

しかし、アソシエーションにアクセスしようとすると、 'product_id'ではなく 'legacy_product_id'という列が検索されます。これは、サイズモデルで外部キーとして定義しています。

> lp = LegacyProduct.find(1).sizes 
    LegacyProduct Load (0.9ms) SELECT `product`.* FROM `product` WHERE `product`.`product_id` = 1 LIMIT 1 
    LegacySize Load (0.6ms) SELECT `size`.* FROM `size` WHERE `size`.`legacy_product_id` = 1 
Mysql2::Error: Unknown column 'size.legacy_product_id' in 'where clause': SELECT `size`.* FROM `size` WHERE `size`.`legacy_product_id` = 1 
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'size.legacy_product_id' in 'where clause': SELECT `size`.* FROM `size` WHERE `size`.`legacy_product_id` = 1 

誰かが間違っているのを見てください。

+0

をあなたは 'リロードしなかった'コンソールをモデルを変更した後、我々は推測?あなたが持っているようにそれは正しいように見えます。 –

+0

はい、すべての変更後に 'reload!'を実行しました – Tyler

+0

'foreign_key'オプションを' belongs_to'から 'has_many:sizes'に移動してみてください。それでも動かない場合は、 'foreign_key'を関連の両側に置いてみてください。 – Zabba

答えて

0
has_many :sizesbelongs_toから foreign_keyオプションを移動し

:!

class LegacyProduct < External 
    ... 
    has_many :sizes, :class_name => 'LegacySize', :foreign_key => 'product_id' 
    ... 
関連する問題