加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails,模型中的finder(使用collect)或控制器(

发布时间:2020-12-17 03:53:20 所属栏目:百科 来源:网络整理
导读:以下哪种方式可以更有效地完成此任务.我想循环遍历模型,检查由每个model_id关联的整数值组成的列表是否大于0.如果是,则将相应的模型放入模型列表中. @models = Model.find(:all).collect{|m| m }.reject{ |i| modellist[i.id] 1 } 或者像这样 finalModels =
以下哪种方式可以更有效地完成此任务.我想循环遍历模型,检查由每个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如何有效地了解它是多么有效.

>编辑

我的模型叫做Picture. modellist(或pList)包含与此类似的数据.

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

我的pList的索引号对应于此的图片ID.所以我需要找到pList [picture id]大于0的图片.

>编辑

二手Benoit Garrets的回答.我要做的是确保pList是由pList = Hash.new而不是pList = []声明的.我使用的确切查询是

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

解决方法

假设你的modellist和pList已经存在并且是Hash,你可以在之前过滤它们并使用find和数组:

@models = Model.find(modellist.reject {|k,v| v < 1} .keys)

你的第二个例子也是如此:

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

这样,您就不会遍历整个数据库.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读