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

Ruby on rails 如何在查询中包含重复记录?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,给定包含重复项的零件ID数组,如何在我的零件模型中找到相应的记录,包括重复项 零件ID的示例数组是[“1B”、“4”、“3421”、“4”]。如果我们假设我有一条与这些值对应的记录,我希望看到总共返回4条记录,而不是3条。如果可能的话,我希望能够对返回的任何内容进行额外的SQL操作 以下是我目前使用的不包括重复项的内容: @parts = Part.where(:part_id => params[:ids]) 作为一个小背景,我试图上传一个XML文件,其中包含某个项目中使用的部件列表。

给定包含重复项的零件ID数组,如何在我的
零件
模型中找到相应的记录,包括重复项

零件ID的示例数组是
[“1B”、“4”、“3421”、“4”]
。如果我们假设我有一条与这些值对应的记录,我希望看到总共返回4条记录,而不是3条。如果可能的话,我希望能够对返回的任何内容进行额外的SQL操作

以下是我目前使用的不包括重复项的内容:

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

作为一个小背景,我试图上传一个XML文件,其中包含某个项目中使用的部件列表。我的应用程序旨在解析XML文件,并将其中列出的零件与我的零件数据库进行比较,以便查看零件的重量。这些项目有时会包含不同部分的副本,所以这就是我在这里要解释的

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

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

很难说清楚您在做什么,您是从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数据和“匹配”数据库记录),您可以使用
select
detect
按part\u id进行内存中的查找

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


Rails将使用
part\u id:ids
自动执行
中的where-IN
。您绝对不必手动构建
where in(?)
部分。