Рельсовое объединение HABTM

Мне нужна помощь в создании ассоциации для моего нового приложения рельсов.

У меня две модели User а также Profession, У пользователя может быть много профессий, а профессия может принадлежать многим пользователям.

я могу сделать HABTM ассоциация в обеих моделях.

пользователь has_and_belongs_to_many :professions

профессия has_and_belongs_to_many :users

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

user1.professions.create(name: "Dev")

user2.professions.create(name: "Dev")

Обе профессии "Dev" будут сохранены в таблице профессий.

Как сохранить уникальное имя профессии в модели профессий и назначить их многим пользователям?

2 ответа

Решение

Я бы предложил разделить его на два этапа.

Сначала найдите или создайте профессию:

profession = Profession.find_or_create_by(name: "Dev")

Затем назначьте профессию пользователю:

user1.professions << profession
user2.professions << profession

Я также рекомендовал бы установить уникальный индекс на professions таблицы name колонка. Это гарантирует уникальность.

Попробуйте создать ассоциацию, как показано ниже:

profession = Profession.find_or_create_by(name: "Dev")
user1.professions << profession

profession = Profession.find_or_create_by(name: "Dev")
user2.professions << profession
Другие вопросы по тегам