Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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 Rails为呈现的集合的每个元素使用新计算的值呈现JSON_Ruby On Rails_Json_Api - Fatal编程技术网

Ruby on rails Rails为呈现的集合的每个元素使用新计算的值呈现JSON

Ruby on rails Rails为呈现的集合的每个元素使用新计算的值呈现JSON,ruby-on-rails,json,api,Ruby On Rails,Json,Api,我希望在查询Rails API路由时,向呈现为render json:的集合的每个元素添加一个新计算的值 这是当前设置: #应用程序/模型 类用户

我希望在查询Rails API路由时,向呈现为
render json:
的集合的每个元素添加一个新计算的值

这是当前设置:

#应用程序/模型
类用户<应用程序记录
有多个:池,通过::user\u池
结束
类池<应用程序记录
通过::user\u池拥有多个:用户
你有很多赌注吗
def平均值()
某种平均水平(自我赌注)
结束
结束
#app/controllers/pool_controller.rb
def索引
@用户=当前用户
@pools=@user.pools
呈现json:@pools,仅:[:ticker,:id]
结束
我想做的是为
@pools
集合的每个
池添加一个
pool.average

应该是这样的:

#app/controllers/pool_controller.rb
def索引
@用户=当前用户
@pools=@user.pools
呈现json:@pools,仅限:[:ticker,:id,average:@pools.each{| pool | pool.average}]
结束
当然,以上这些都不行,实现我的目标最优雅的方式是什么

我能想到的唯一方法是计算所有之前的平均查询,然后将其作为
池的新属性插入数据库中,这样控制器就可以变成:

#app/controllers/pool_controller.rb
def索引
@用户=当前用户
@pools=@user.pools
呈现json:@pools,仅:[:ticker,:id,:average]
结束

但我想知道,如果我想避免大量计算来更新数据库,并向每个池添加:average属性,我该怎么做。即使可能是最好的解决方案,而不是计算每个查询的平均值?

在pool.rb中尝试此方法编写一个名为average的方法,并在该方法中编写逻辑

在控制器的索引方法中,以这种方式写入

render json:@pools,only:[:ticker,:id,:average],methods::average

在pool.rb中尝试此操作。编写一个名为average的方法,并在该方法中编写逻辑

在控制器的索引方法中,以这种方式写入

render json:@pools,only:[:ticker,:id,:average],methods::average