【问题标题】:Get array of attribute values, along with an attribute from a join获取属性值数组以及来自连接的属性
【发布时间】:2015-06-06 12:56:10
【问题描述】:

我相信我已经接近了。我目前的查询是这样的

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+ 项和需要尽可能快。

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

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案1】:

    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 调用以使用参数化而不是字符串插值 - 不建议使用插值,尤其是当您从用户那里获取值时。

    进一步阅读:

    Official documentation for pluck

    An in-depth explanation of how to use pluck

    【讨论】:

    • 谢谢!我使用过 pluck,但以前没有使用多个值。我不知道它可以做到这一点。非常有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2020-09-05
    • 2015-05-17
    • 2012-10-16
    相关资源
    最近更新 更多