1

Не уверен, что это лучший способ - у меня есть предложение where, которое мне нужно использовать для двух моделей. Чтобы получить результаты списка для автозаполнения. У меня есть модель «Членство», которая содержит ссылку «User» или ссылку «Member» (либо user_id - ниль, либо member_id - ноль, но не оба).Где рельсы места - используя две модели

Мне нужно указать как имена пользователей, так и имена участников для current_user, выщипывая user_id, если не nil или member_id, соответственно.

Я пытался добавить & & в ИНЕКЕ, но это, кажется, не работает

User.where(id: current_user.memberships.pluck(&:user_id)) && Member.where(id: current_user.memberships.pluck(&:member_id) 

Как я могу сделать эту работу и сделать его Railsy?

+0

Ваш && означает, что вы хотите присоединиться к 2 запросов или что-то еще? –

+0

* «Кажется, что это не работает» * не очень полезно. Что не работает? Вы получили сообщение об ошибке? – spickermann

+0

Да. Мне нужно указать имена для членов и пользователей в зависимости от того, является ли user_id или если member_id имеет ссылку в записи членства - мне нужно перечислить их как одну коллекцию. – mike0416

ответ

1

Это должно дать вам то, что вы хотите:

current_memberships = current_user.memberships 
user_names = User.where('users.id in ?', current_memberships.pluck(:user_id).compact.uniq) 
       .select('users.name') 
       .map(&:name) 
member_names = Member.where('members.id in ?', current_memberships.pluck(:member_id).compact.uniq) 
        .select('members.name') 
        .map(&:name) 

# concat the array of user names and member names 
user_names + member_names 
+0

Единственная проблема в этом, результат - массив, а не активное отношение. –

+0

Да, это даст вам массив имен. Итак, вы хотите установить активное отношение записей? –

+0

Это не мой вопрос, но у меня есть мнение, что активное отношение - лучший выбор :) –

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