Как запросить связь для неуникальных значений поля с SQL / ActiveRecord? - PullRequest
0 голосов
/ 02 мая 2011

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

У меня довольно простая модель. Пользователь -> Рассказы -> Комментарии. То есть, у пользователя есть история_мани, а у комментария есть история.

Я пытаюсь вернуть только те истории, которые:

  • Есть комментарии
  • Создан текущим пользователем или прокомментирован current_user
  • Но не в том случае, если текущий пользователь является только пользователем, комментирующим его

То, что я имею до сих пор:

Story.includes(:comments).where("stories.user_id = ? OR comments.user_id = ?", current_user.id, current_user.id)

Но я понятия не имею, как выполнить последнее условие в SQL. Единственное, что я мог сделать, это использовать перечисляемые методы.

@stories.reject! { |story| story.comments.collect(&:user_id).all? { |user_id| user_id == current_user.id }}

1 Ответ

1 голос
/ 02 мая 2011

Похоже, вы хотите иметь вложенный подзапрос, что-то вроде

Story.includes(:comments).where("stories.user_id = ? OR comments.user_id = ?) 
    and exists (select 'x' from comments c2 where c2.story_id = stories.id 
    and c2.user_id != ?)",
  current_user.id, current_user.id, current_user.id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...