如何使用.where并检查自己的状况?

时间:2017-02-01 20:48:32

标签: ruby-on-rails activerecord where

我希望得到所有未满的游戏,即表中有空位。 可用的点数是我的模型游戏的nplayer属性。

我有一个助手来获取游戏中已有的当前number_of_players:number_of_players(game)

我正在尝试以下内容来展示有空间的游戏:

@opengames = Game.where("nplayer > ?", number_of_players(***game***))

我的问题是:我应该在我的助手number_of_game(xxxx)中使用什么。

我怎么知道。在哪里检查它试图找到的游戏?是否有可能或者我应该获得所有游戏,而不是逐一比较?像:

@opengames = []    
@games = Game.all
    @games.each do |game|
      if game.nplayer > number_of_players(game) 
            @opengames.push game
      end
    end

(对不起,如果我的解释不清楚......英语不是我的母语)

1 个答案:

答案 0 :(得分:1)

您可以尝试select

@opengames = Game.all.select { |game| game.nplayer > number_of_players(game) }

但是,如果只能在db级别执行number_of_players,它会更清晰。例如,如果游戏和套牌相关联,您可以执行

Game.where("`games`.`nplayer` > (SELECT COUNT(*) FROM `decks` WHERE `decks`.`game_id` = `games`.`id`)")