1

Я использую некоторые открытые данные gov в MYSQL, которые я импортировал в свое приложение rails.ActiveRecord двухсторонний внешний ключ.

Я расширил базу данных некоторыми моими собственными таблицами и использовал в столбцах идентификаторы столбцов.

Однако таблицы исходной базы данных связаны уникальным идентификатором 'ndb'.

Я думал, что перекрестные ссылки двух моделей :foreign_key=>'ndb' между моделями я получил бы правильные таблицы, но через :foreign_key он, кажется, связывает идентификатор из одной таблицы с столбцом ndb другого.

Мои модели выглядят как этот

 
class Food < ActiveRecord::Base 
has_many :weights, :foreign_key=>'ndb' 
has_many :food_names 
end 

class Weight < ActiveRecord::Base 
belongs_to :food, :foreign_key=>'ndb' 

Есть ли способ указать, что столбец «NDB» является связующим звеном между столом питания и веса, а не food_id к NDB?

ответ

0

То, что я сделал как возможное временное решение, заключается в использовании :finder_sql для связывания таблиц вместе.

My Food модель теперь:

 
class Food < ActiveRecord::Base 
    has_many :weights, :finder_sql =>'Select weights.* FROM weights LEFT JOIN foods ON foods.ndb=weights.ndb WHERE foods.id=#{id}' 

Я не уверен, если это лучшее решение или нет, но это, кажется, работает.

0

Вы пробовали set_primary_key 'ndb' в ваших классах AR?

set_primary_key документы.

+0

Я не пробовал это, но мне все еще нужно использовать поля _id в других запросах, поскольку не все связано через это поле «ndb», что я имел в виду под «расширением базы данных, чтобы использовать некоторые из моих собственные таблицы ", поэтому в 70% случаев я использую стандартные идентификаторы rails, но иногда мне нужно связать 'ndb to ndb' – pedalpete

+0

Ну, используя set_primary_key для тех таблиц, которые в ней нуждаются, будет началом, позволяющим вещам как find() для работы. Он также установит значения по умолчанию для ассоциаций. – noodl

+0

Извините, может быть, я не понимаю. Для чего-то вроде таблицы еды я использую поле идентификатора в 70% случаев (придерживаясь стандартов рельсов) в других 30% случаев, мне нужно связать эту таблицу продуктов с другой таблицей, подобной весам через поле ndb. Установка set_primary_key на модели ломает 70% этих отношений. если я не пропущу что-то еще. Как только я установил 'ndb' в качестве первичного ключа, я не могу подключить две таблицы с id к food_id – pedalpete

Смежные вопросы