显示两个活动记录查询共有的记录

时间:2016-09-24 17:27:16

标签: ruby-on-rails activerecord

我的rails应用中有一个搜索功能,可以通过gametag搜索用户。游戏和标记has_and_belong_to_many用户。

我想搜索game a 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

任何想法都非常感激!

编辑:模型关联

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

1 个答案:

答案 0 :(得分:1)

您是否尝试同时应用这两个条件?

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

这应该返回同时拥有名称为@game的游戏和名称为@user_profile_tag的代码的用户。