Rails Activerecord: Map vs pluck vs as_json



我的问题纯粹是基于 3 种方法的性能影响。我需要知道哪种方法是用于手头任务的最佳方法。

我需要为一组特定的记录渲染 json。

我目前使用的方法是

result = User.all.map{ |u| { name: u.name, id: u.id } }

如您所知,这将循环遍历 Activerecord 对象,这对于大量记录的性能非常低。

另一种方法是使用弹拨。

result = User.all.pluck(:name,:id).map{ |u| { name: u[0], id: u[1] } }

性能可能要好得多,但代码看起来很臭。

如果我们覆盖as_json,也可以用as_json实现相同的效果,因为仅包含必要的参数,但我需要知道这是否也会遍历 activerecord 对象。

随意说是否有任何其他方法可以提供更好的性能。

你可以只使用:

User.select(:id, :name).to_json

它可能不如您的pluck(...).map版本那样性能,这确实是非常低级的。但它比您的all.map版本更快,更优雅(又名更易于阅读)。

result = User.all.as_json(only: [:name, :id])

最新更新