gpt4 book ai didi

ruby-on-rails - 基于子对象集合中的复合键创建哈希

转载 作者:太空宇宙 更新时间:2023-11-03 16:08:50 24 4
gpt4 key购买 nike

我想根据属于父对象的子对象集合中的外键组合创建哈希(使用 Base64)。

class Basket < ActiveRecord::Base
has_many :items
end

class Item < ActiveRecord::Base
belongs_to :basket
belongs_to :mfg
belongs_to :locale
end

假设我们有一个包含三个项目对象的篮子对象:

Item #1
- mfg_id: 1
- locale_id : 2

Item #2
- mfg_id: 3
- locale_id : 4

Item #3
- mfg_id: 5
- locale_id : 6

散列会像这样:

Base64.encode64(12-34-56)

我的问题实际上是在 ruby​​ 中创建这样一个散列的最有效方法是什么?如果只是要迭代几个子对象,那么我就不会太担心效率;但是,在我的情况下可能有很多,所以我希望您能就构建哈希的最有效方法提出建议。

最佳答案

也许:

basket.items.select([:mfg_id, :locale_id]).map { |i| "#{i.mfg_id}#{i.locale_id}" }.join("-")

应该有大量的项目才能使这样的事情效率低下(因为创建了中间数组)。您还可以使用 inject 就地构建字符串并避免使用中间数组,但与 map + join 相比,这非常难看。

并使用纯 SQL(不是那么可移植,但速度更快):

basket.items.select("GROUP_CONCAT(mfg_id, locale_id SEPARATOR '-')")

关于ruby-on-rails - 基于子对象集合中的复合键创建哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8098315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com