У меня есть дополнительная база данных MySQL, настроенная для переноса устаревших данных в приложении Rails 3. Я легко могу подключиться к нему через этот класс:Rails app, foreign_key столбец неизвестен в MySQL
class External < ActiveRecord::Base
self.abstract_class = true
establish_connection :legacy
end
Есть две модели, которые наследуют этот класс:
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:
> 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>]
Но когда я пытаюсь добраться до ассоциаций, он ищет столбец «legacy_product_id» вместо «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
Кто-нибудь видит, что я делаю неправильно?
Ты '' перезагружать консоль после изменения модели, мы предполагаем? Это выглядит правильно, как и у вас. –
yes, did 'reload!' После каждого изменения – Tyler
Попробуйте переместить опцию 'foreign_key' из' own_to' в 'has_many: sizes'. Если это не сработает, попробуйте поместить 'foreign_key' с обеих сторон ассоциации. – Zabba