Ruby on rails 获取属性值数组,以及来自联接的属性

Ruby on rails 获取属性值数组,以及来自联接的属性,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我相信我已经接近了。我现在的问题是 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的:typ

我相信我已经接近了。我现在的问题是

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+项响应,并且需要尽可能快

不知道如何在不执行映射的情况下从上面转到属性数组


谢谢你的帮助

使用
pulk
方法可以实现您想要的功能。在您的情况下,它将如下所示:

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
调用更改为使用参数化,而不是不推荐使用字符串插值,特别是当您从用户处获取值时

进一步阅读:


谢谢!我使用过Pull,但以前没有使用多个值。我不知道它能做到。非常有用。