Rails имеет множество запросов has_and_belongs_to_many

#ruby-on-rails #ruby #rails-activerecord

#ruby-on-rails #ruby #rails-activerecord

Вопрос:

У меня есть следующая схема базы данных в моем приложении rails 4

Пользователи > —Tags_users —< Теги > —Posts_tags —< Сообщения

учитывая текущего зарегистрированного пользователя, каков наилучший способ для меня получить все сообщения (от всех пользователей), которые соответствуют там тегам, которые их интересуют.

Ответ №1:

Вы можете передать массив Model#where , чтобы получить массив записей с выбранными критериями.

 def show_by_tags
  @posts = Post.all
  array_of_tags.each do |tag|
    @posts.where(tag_name: tag)
  end
end
 

Комментарии:

1. Спасибо, но это не совсем то, что я имел в виду. Я хочу выбрать сообщения, которые могут заинтересовать пользователя, на основе выбранных ими тегов

2. это выдает ошибку… PG:: UndefinedColumn: ОШИБКА: столбец posts.tag_id не существует СТРОКА 1: ВЫБЕРИТЕ «сообщения».* ИЗ «сообщений», ГДЕ «сообщения».»tag_id» В (SE … ^: ВЫБЕРИТЕ «сообщения».* ИЗ «posts», ГДЕ «posts».»tag_id» В (ВЫБЕРИТЕ «tags».»id» ИЗ «tags» ВНУТРЕННЕЕ СОЕДИНЕНИЕ «tags_users» В «tags».»id» = «tags_users».»tag_id» ГДЕ «tags_users».»user_id» = $ 1) этопохоже, rails не распознает мои отношения «многие ко многим», не должно быть post.tag_id, я создал таблицу posts_tags с FK для обоих сообщений и тегов

3. У вас есть таблица соединений с именем: posts_tags? Отредактируйте вопрос, чтобы показать больше информации, например, связанные модели и отношения.

4. Попробуйте выполнить фильтрацию по каждому имени тега в массиве. Замените tag_name атрибутом для фильтрации.