2016-09-24 4 views
1

У меня есть функция поиска в моем приложении rails, где можно найти поиск по game или tag. И игра, и тег has_and_belong_to_many пользователей.Показать записи, общие для двух активных запросов записи

Я хотел бы искал gameиtag для отображения только тех пользователей, как с этой игрой и метки.

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

Поиск модели:

users = User.all 

users = 
     tu = Tag.includes(:users).where(["name like ?", "%#{user_profile_tag}%"]) 
     gu = Game.includes(:users).where(["name like ?", "%#{game}%"]) 

    users = (tu + gu) 

    return users 

end 

Я на немного потери относительно того, что делать, я попытался с помощью & между tu and gu, но для этого не перечисляет нет пользователей.

Поисковые контроллер:

def new 
    @search = Search.new 
    @game = User.includes(:game).where(game: { name: @game }) 
    @user_profile_tag = User.includes(:tag).where(tag: { name: @user_profile_tag }) 

end 

Любые идеи, высоко ценится!

Edit: модель объединения

class User < ActiveRecord::Base 
has_and_belongs_to_many :games 
has_and_belongs_to_many :tags 

class Tag < ActiveRecord::Base 
has_and_belongs_to_many :users 

class Game < ActiveRecord::Base 
has_and_belongs_to_many :users 
+0

Используйте 'join' вместо 'includes' или используйте методы 'includes' и 'reference'. Также вы должны опубликовать свои отношения с моделью тоже – arieljuod

+0

@arieljuod спасибо, теперь включили модели – JG3

ответ

1

Вы пробовали применять оба условия одновременно?

users = User.joins(:games, :tags) 
      .where(games: { name: @game }, tags: { name: @user_profile_tag }) 

Это должно возвращать пользователей, которые имеют как игру с именем @game и тег с именем @user_profile_tag.

+0

Спасибо, это возврало ошибку шаблона: 'Ассоциация названная 'игра' не была найдена на Пользователе; возможно, вы его опечалили? ' Возможно, существует проблема с ассоциациями? Изменили исходный вопрос, чтобы включить их. – JG3

+0

это 'игры'. вот что я имел в виду в своем ответе. Я обновил ответ. – Aleksey

Смежные вопросы