2016-08-28 3 views
0

Можно ли добавить ссылки на столбец, отличный от столбца id?Добавить ссылки на выбранный столбец, отличный от id

Обычно, когда отношения между двумя моделями (Model1 и model2) создаются, использование model1:references и model2:references для создания модели Relationship автоматически добавляет столбец model1_id и model2_id (наряду с индексом и внешним ключом ссылкой) для использования в model1/model2 ассоциации:

rails generate Relationship model1:references model2:references 

Скажем, например Model1 = Teacher и Model2 = Pupil.
Предположим, что записи Model2 (записи учеников) обновляются время от времени с помощью рейк-задачи: значения ее атрибутов (например, name и school_credits) будут меняться, сохраняя id и ranking (от 1 до 100).

Ассоциированный преподаватель с pupil_id не имеет большого смысла.
Каждый учитель должен быть связан с именами своих учеников, используя в качестве ссылки на внешний ключ атрибут pupil.name вместо pupil.id.

Возможно ли это?
Какие опции я могу добавить в команду rails generate Relationship или что reference am Я должен добавить, чтобы иметь этот результат?

+0

Если вы ассоциируете Ученика с именем, а имя ученика изменилось, как бы вы определили связь? –

+0

Скажите id 1 ранг 1 - Пол с 100 кредитами, 1d 2 ранг 2 - Кевин с 90 кредитами и id 3 ранга 3 - Ли с 80 кредитами. Если Lea зарабатывает 30 кредитов, то идентификатор 1 ранга 1 обновляется с именем Lea и 110 кредитов. Пол и Кевин тоже меняются. Если Lea является учеником учителя1, учитель1 должен быть связан с Lea, а не с id 3. – Asarluhi

ответ

1

Да, вы можете. Проверьте разделы на foreign_key и primary_key следующим образом: link. Я не использую генератор, поэтому я не могу прокомментировать, какие параметры передаются в генератор, но вам просто нужно убедиться, что столбец, который будет использоваться как внешний ключ, существует в вашей таблице и что вы назначаете соответствующий файл foreign_key в файлах модели.

Но зачем он нужен? Я не понимаю, какой у вас вариант использования, который потребует от вас сохранить идентификатор и ранжирование идентичным.

+0

Возьмите, например, рейтинг Wta (теннис для женщин). Они обновляются каждую неделю. Вы можете использовать nokogiri для обновления имен и точек, ищущих ранжирование. Трудно удержать след теннисистов из 100 (то есть тех, кто выходит из первых 100). – Asarluhi