我相信,我已经接近了。我目前的查询是
items = Item.select("items.icon, items.name, item_types.name AS type, items.level, items.rarity, items.vendor_value")
.joins(:item_type)
.where("item_types.name = '#{params[:item_type]}'")
这会给我一个Item对象数组,至少使用item_type.name回复:type
。
我正在寻找的是一系列看起来如此的数组:
[icon, name, item_type.name, level, rarity, vendor_value]
我已经相当容易地工作了,但对我来说很重要的是,这可以通过sql一次性完成,而不是之后创建一个地图,因为有时候我需要用40k +项目来回应需要这个尽可能快。
不知道如何从上面转到属性数组,而不执行地图。
感谢您的帮助!
答案 0 :(得分:3)
pluck
方法正是您想要的。在你的情况下,它看起来像这样:
items = Item.joins(:item_type)
.where("item_types.name = ?", params[:item_type])
.pluck("items.icon", "items.name", "item_types.name AS type",
"items.level", "items.rarity", "items.vendor_value")
我还更改了where
调用以使用参数化而不是字符串插值 - 不建议使用插值,尤其是当您从用户那里获取值时。
进一步阅读: