给定包含重复项的部分ID数组,如何在Part
模型中找到相应的记录,包括重复项?
部分ID的示例数组将是["1B", "4", "3421", "4"]
。如果我们假设我有一个对应于每个值的记录,我希望看到总共返回4条记录,而不是3.如果可能的话,我希望能够对返回的任何内容进行额外的SQL操作。
以下是我目前正在使用的不包含重复内容的内容:
@parts = Part.where(:part_id => params[:ids])
为了给一点背景知识,我正在尝试上传一个包含某个项目中使用的部件列表的XML文件。我的应用程序旨在解析XML文件并比较我的Parts数据库中列出的部分,以便我可以看到部件的重量。这些项目有时会包含各个部分的副本,所以这就是我在这里要考虑的内容。
答案 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数据和'匹配的'数据库记录),你可以使用select
或detect
通过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