LINUX.ORG.RU

ActiveRecord и связи между таблицами


0

0

Имеются 2 таблицы:
tastes (id, taste_id, language_id, description) и wines (id, taste_id, bla-bla)
В wines надо создать связь belongs_to, при этом wines.taste_id = tastes.taste_id. Т.е. связывание происходит не по первичному ключу. Как это реализовать в рельсах?
Если это делается через костыли, то как тогда подходить в рельсах к реализации многоязычных бд?


Ответ на: комментарий от anonymous

Всё равно не понимаю. Причем здесь has_and_belongs_to_many? У меня самая обыкновенная belongs_to, только связываться должно не wine.taste_id = taste.id, а wine.taste_id = taste.taste_id. При hbtm потребуется ведь ещё одна таблица - tastes_wines, которая мне не нужна

BobiKK
() автор топика

вообще-то у тебя тут получается has_many и has_many, чтобы wines belongs_to taste нужно перепроектировать твою БД

PartyZan ★★★
()
Ответ на: комментарий от PartyZan

А есть ли смысл переделывать? Мне казалось, что структура, в которой запись можно идентифицировать по 2-м ключам (taste_id, language_id) довольно логична и гибка, при этом нет дублирования данных

BobiKK
() автор топика
Ответ на: комментарий от BobiKK

ну смотри сам, у тебя есть 5 taste (на 5 языках) и wine. в твоем случае в wine тоже будет 5 записей, причем абсолютно идентичных - будет изменятся только taste_id

PartyZan ★★★
()
Ответ на: комментарий от PartyZan

Не-не, записи в wine уникальны. Каждая запись соответствует конкретному продукту. У каждого вина, соответсвенно, есть вкус, а вот он уже может быть представлен на разных языках, хотя вкус один и тот же

BobiKK
() автор топика
Ответ на: комментарий от BobiKK

Кажется начинаю понимать что, ты хочешь, а не проще ли сделать вот так:

wines - taste -> translations

т.е. wine has_one (belongs_to) :taste

taste has_many :translations

PartyZan ★★★
()
Ответ на: комментарий от PartyZan

Конечно, можно и так сделать. Только вот в таблице tastes всего одно информативное поле. Стоит ли ради этого городить ещё одну таблицу?

BobiKK
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.