Проверьте, включает ли массив объектов какой-либо объект из массива - PullRequest
0 голосов
/ 05 марта 2019

У меня есть массив объектов с именем posts, и у меня есть комментарий в c1 как массив комментариев пользователя Bob.Взаимосвязь между постом и комментарием - это сообщение has_many Comments.

c1 = Comment.where(user: "Bob")
# c1 contains comment array, e.g. [#<Comment id: 23, ... >]

posts = Post.all.select{|p| p.comments.include?(c1) }
# p.comments returns comments for that post, e.g. [#<Comment id: 23, ... >]

Если бы p.comments должен был вернуть один элемент массива, а c1 имел один элемент массива, как показано в комментариях в разделе кода выше, сравниваяоба значения возвращают true, тогда как p.comments.include? (c1) возвращает false.Я хочу отфильтровать все сообщения, содержащие комментарии Боба.

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Не знаю, какова ваша основная задача, но позвольте мне угадать:

Если вы хотите выводить комментарии от пользователя - вам нужно использовать ассоциации и избегать кода рубина.

Например, выМожно добавить что-то вроде:

class User
  has_many :commented_posts, class_name: "Post", through: :comments, sources: :commentable

# or source: :post (not sure what relation you have)
# so you can do @user.commented_posts
0 голосов
/ 05 марта 2019

Вы хотите include связать записи с вашим запросом, а затем отфильтровать их соответствующим образом:

Post.includes(:comments).where(comments: { user: 'Bob' })

Вот еще немного информации о запросах Rails Active Record

https://guides.rubyonrails.org/active_record_querying.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...