#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 атрибутом для фильтрации.