我的rails应用中有一个搜索功能,可以通过game
或tag
搜索用户。游戏和标记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
答案 0 :(得分:1)
您是否尝试同时应用这两个条件?
users = User.joins(:games, :tags)
.where(games: { name: @game }, tags: { name: @user_profile_tag })
这应该返回同时拥有名称为@game
的游戏和名称为@user_profile_tag
的代码的用户。