gpt4 book ai didi

ruby-on-rails - Rails,模型中的查找器(使用收集)或 Controller 中的查找器(迭代和使用推送)。哪个更有效?

转载 作者:行者123 更新时间:2023-12-02 16:18:27 25 4
gpt4 key购买 nike

下面哪种方法可以更有效地完成此任务。我想循环遍历一个模型,检查由与每个 model_id 关联的整数值组成的列表是否大于 0。如果是,则将相应的模型放入模型列表中。

@models = Model.find(:all).collect{|m| m }.reject{ |i| modellist[i.id] < 1 }

或者像这样

finalModels = []
Model.find_each do |model|
if modellist[model.id] > 0 #edited
#if modellist[model.id] != 0
finalModels.push( model )
end
end
@models = finalModels

我倾向于第二种方法,但我不确定。也许可以深入了解 .collect 和 .reject 的工作原理,看看它的效率如何。

  • 编辑

我的模型称为图片。 modellist(或 pList)包含与此类似的数据。

[nil,nil,nil,3,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,
nil,nil,7,nil,nil,nil,0,nil,nil,nil,0,0,nil,nil,1,3]

I pList 的索引号对应于该图片的 id。所以我需要找到pList[图片id]大于0的图片。

  • 编辑

使用了 Benoit Garrets 的答案。我要做的就是确保 pList 是由 pList = Hash.new 而不是 pList = [] 声明的。我使用的确切查询是

@pictures = Picture.find(pList.select {|k, v| v > 0}.keys)

最佳答案

您可以直接在数据库中执行此操作:

@models = Model.find(:all, :conditions => ["id in (?)", modellist.select{ |i| i && i > 0}])

或更短的版本:

@models = Model.find(modellist.select{ |i| i && i > 0})

关于ruby-on-rails - Rails,模型中的查找器(使用收集)或 Controller 中的查找器(迭代和使用推送)。哪个更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8152701/

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