Как мы можем использовать или обусловить в нескольких отношениях - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь выполнить запрос, чтобы получить какие-либо проекты, владельцем или членом которых является пользователь. В проекте может быть один пользователь (owner_to) или несколько пользователей в качестве участника (has_and_belongs_to_many).

Следующее не выдает ошибку, но не работает правильно:

Project.joins(:members).where(user: current_user).or(Project.joins(:members).where(:users  => { :id => current_user.id })).order('updated_at DESC')

Следующее выдает ошибку ArgumentError Exception: Relation passed to #or must be structurally compatible. Incompatible values: [:joins]:

Project.joins(:user).where(user: current_user).or(Project.joins(:members).where(:users  => { :id => current_user.id }))

1 Ответ

1 голос
/ 23 апреля 2020

Возможно, вам придется прибегнуть к использованию нескольких запросов, эти операторы or могут быть несколько хитрыми. Может быть, что-то вроде этого.

ids1 = Project.where(user_id: current_user.id).ids
ids2 = Project.joins(:members).where(users: { id: current_user.id }).ids

Project.where(id: [ids1, ids2].flatten)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...