Направляющие find_or_create_by больше чем один атрибут?

Существует удобный динамический атрибут в активной записи, названной find_or_create_by:

Model.find_or_create_by_<attribute>(:<attribute> => "")

Но что, если мне нужно к find_or_create больше чем одним атрибутом?

Скажите, что у меня есть модель для обработки отношений M:M между Группой и участником под названием GroupMember. У меня могло быть много экземпляров, где member_id = 4, но я никогда не хочу несколько раз экземпляр где member_id = 4 и group_id = 7. Я пытаюсь выяснить, возможно ли сделать что-то вроде этого:

GroupMember.find_or_create(:member_id => 4, :group_id => 7)

Я понимаю, что могут быть лучшие способы обработать это, но мне нравится удобство идеи find_or_create.

199
задан Marlin Pierce 4 June 2018 в 09:04
поделиться

1 ответ

Несколько атрибутов могут быть связаны с и :

GroupMember.find_or_create_by_member_id_and_group_id(4, 7)

(используйте find_or_initialize_by , если вы не хотите сразу сохранять запись)

Изменить: Вышеупомянутый метод устарел в Rails 4. Новый способ сделать это будет:

GroupMember.where(:member_id => 4, :group_id => 7).first_or_create

и

GroupMember.where(:member_id => 4, :group_id => 7).first_or_initialize

Редактировать 2: Не все из них были исключены из рельсов, только специфичные для атрибутов.

https://github.com/rails/rails/blob/4-2-stable/guides/source/active_record_querying.md

Пример

GroupMember.find_or_create_by_member_id_and_group_id(4, 7)

стал

GroupMember.find_or_create_by(member_id: 4, group_id: 7)
461
ответ дан 23 November 2019 в 05:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: