用模型方法查询?

我在仅对活动对象执行查询时遇到问题。 我在数据库中没有活动列,相反,在模型游戏中,我有以下方法:

def complete? self.winner ? true : false end 

那么如果一个游戏有一个赢家, #complete? 将返回true。 我想查询所有会为此方法返回false的游戏,有没有办法使用ActiveRecord执行此操作? 现在在我的控制器中我只是调用@games = Game.all ,然后在我的部分渲染游戏中:

  yada yada  

这看起来有点像hacky,如果我想显示“已完成”的游戏,则需要我写一个不同的部分。 无论如何,我想知道控制器中是否有一种方法只能分配从模型方法返回true / false的对象?

快速简便的类方法怎么样?

 class Game < ActiveRecord::Base def self.completed_games games = [] Game.all.each { |game| games << game if game.complete? } return games end end 

然后调用Game.completed_games 。 您也可以为不完整的游戏制作一个。 您也可以将该方法设为一行,但我将其分解,以便您可以准确地看到正在发生的事情。

由于winnerGame的财产,为什么不查询? 你只需要这个:

 completed = Game.where('winner is not null') incomplete = Game.where('winner is null') 

如果您愿意,也可以将它们作为范围 :

 class Game < ActiveRecord::Base scope :finished, where('winner is not null') scope :unfinished, where('winner is null') #... end 

然后你可以在数据库出来之前添加进一步的过滤或排序。

让数据库完成工作,他们擅长搜索和投放数据。 无论何时将整个表从数据库中拉出来进行客户端处理,您都应该再次考虑,因为您几乎肯定会犯错误。

你可以这样做

  Game.all.select{ |game| game.complete? }