如何在查询中包含重复记录?

时间:2013-11-18 20:05:56

标签: ruby-on-rails ruby-on-rails-3

给定包含重复项的部分ID数组,如何在Part模型中找到相应的记录,包括重复项?

部分ID的示例数组将是["1B", "4", "3421", "4"]。如果我们假设我有一个对应于每个值的记录,我希望看到总共返回4条记录,而不是3.如果可能的话,我希望能够对返回的任何内容进行额外的SQL操作。

以下是我目前正在使用的不包含重复内容的内容:

@parts = Part.where(:part_id => params[:ids])

为了给一点背景知识,我正在尝试上传一个包含某个项目中使用的部件列表的XML文件。我的应用程序旨在解析XML文件并比较我的Parts数据库中列出的部分,以便我可以看到部件的重量。这些项目有时会包含各个部分的副本,所以这就是我在这里要考虑的内容。

2 个答案:

答案 0 :(得分:1)

我能想到的唯一方法是使用map ...

@parts = params[:ids].map { |id| Part.find_by_id(id) }

答案 1 :(得分:0)

很难确切地说出你在做什么,你是在从xml还是从数据中查找重量?

parts_xml = some_method_that_loads_xml
part_ids_from_xml = part_xml.... # pull out the ids
parts = Part.where("id IN (?)", part_ids_from_xml)

现在你有两个数组(xml数据和'匹配的'数据库记录),你可以使用selectdetect通过part_id进行内存查找

part_ids_from_xml.each do |part_id| 
  weight = parts.detect { |item| item.id == part_id }.weight
  puts "#{id} weighs #{weight}"
end

请参阅http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-detect

http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-select