Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RoR-通过方法结果筛选模型_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails RoR-通过方法结果筛选模型

Ruby on rails RoR-通过方法结果筛选模型,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的模型上有一个方法,一个名为stats的Case,它计算并返回包含模型统计信息的哈希值。我怎样才能创建一个根据该方法的结果进行过滤的查询?(例如,如果我想看到所有案例的胜率超过50的所有结果) 我在网上找到的关于作用域的所有内容都与通过模型的不同属性进行过滤有关在这种情况下,您可以使用select方法 Case.select{|c| c.stats[:win_percentage] > 50 } 如果stats是实例方法我假设您正在处理一个ActiveRecord模型。 如果win_p

我的模型上有一个方法,一个名为
stats
Case
,它计算并返回包含模型统计信息的哈希值。我怎样才能创建一个根据该方法的结果进行过滤的查询?(例如,如果我想看到所有案例的胜率超过50的所有结果)


我在网上找到的关于作用域的所有内容都与通过模型的不同属性进行过滤有关

在这种情况下,您可以使用select方法

Case.select{|c| c.stats[:win_percentage] > 50 }

如果stats是实例方法

我假设您正在处理一个ActiveRecord模型。 如果win_percentage是一列,那么您可以执行以下操作:

Case.where("win_percentage > 50")
这比简单地使用select方法更有效,因为您让DB进行过滤


但是如果您需要对一个不能表示为where条件的方法进行过滤(即DB不能执行),那么是的,您需要使用.select{}方法。(在这种情况下,如果您有很多结果,您可能希望使用.find_In_batches())。

您需要表达
stats
在SQL中的作用,以便您可以在数据库中使用该逻辑。值得注意的是,这将检索整个表并为每一行执行块,这可能不是非常有效的。它不是列。不过,作为专栏,我确实有胜负。编写一个计算平均值的裸SQL查询是否更有效率?如果你有很多数据,你可以考虑为这些统计数据添加列,然后添加回调(或DB触发器)来填充它们。这样你就不必每次都在飞行中计算统计数据。