Rails 只从另一个数组中获取数组元素

Rails get only array elements from another array

我得到了以下查询的结果:

query

class SyncResult
  def self.query(products)
    Imports::Product
      .order(:last_sync_at)
      .pluck(:id, :name, :code, :sync_result, :last_sync_at)
      .map do |id, name, code, result, last_sync_at|
        {
          id: id,
          name: name,
          code: code,
          result: result,
          last_sync_at: last_sync_at
        }
      end
  end
end

query result

=> [{:id=>"611ea9a7392ab50013cf4713", :name=>"2-Tone Hoodie", :code=>"SS22CH013", :result=>nil, :last_sync_at=>nil},
     {:id=>"60ec84062f25d400150b351c", :name=>"5-Pocket Denim", :code=>"SS22WP014", :result=>nil, :last_sync_at=>nil},
     {:id=>"61966dc83e81dd001731ccd7", :name=>"Zip Shirt Jacket", :code=>"FW22WT001", :result=>nil, :last_sync_at=>nil},
     {:id=>"61d5cab6b41408001b0e9376", :name=>"Yankees Satin Varsity Jacket", :code=>"FW22WJ021", :result=>nil, :last_sync_at=>nil}]

products = ['SS22CH013', 'FW22WJ021']

现在我只想获取这些包含来自 products 数组的代码的数组哈希元素。 最终结果应该是:

=> [{:id=>"611ea9a7392ab50013cf4713", :name=>"2-Tone Hoodie", :code=>"SS22CH013", :result=>nil, :last_sync_at=>nil},
{:id=>"61d5cab6b41408001b0e9376", :name=>"Yankees Satin Varsity Jacket", :code=>"FW22WJ021", :result=>nil, :last_sync_at=>nil}]

您可以通过以下方式达到预期的效果。

  1. 正在更新查询以获取给定代码的产品
    products = ['SS22CH013', 'FW22WJ021']
    
    Imports::Product
      .where(code: products)
      .order(:last_sync_at)
      .pluck(:id, :name, :code, :sync_result, :last_sync_at)
      .map do |id, name, code, result, last_sync_at|
        {
          id: id,
          name: name,
          code: code,
          result: result,
          last_sync_at: last_sync_at
        }
    
  2. 正在更新查询以获取给定代码的产品(无需 pluck)
    products = ['SS22CH013', 'FW22WJ021']
    
    Imports::Product
      .where(code: products)
      .order(:last_sync_at)
      .select(:id, :name, :code, :sync_result, :last_sync_at)
      .map(&:attributes)
    
  3. 对查询结果使用 select
     query_result = [{:id=>"611ea9a7392ab50013cf4713", :name=>"2-Tone Hoodie", :code=>"SS22CH013", :result=>nil, :last_sync_at=>nil},
     {:id=>"60ec84062f25d400150b351c", :name=>"5-Pocket Denim", :code=>"SS22WP014", :result=>nil, :last_sync_at=>nil},
     {:id=>"61966dc83e81dd001731ccd7", :name=>"Zip Shirt Jacket", :code=>"FW22WT001", :result=>nil, :last_sync_at=>nil},
     {:id=>"61d5cab6b41408001b0e9376", :name=>"Yankees Satin Varsity Jacket", :code=>"FW22WJ021", :result=>nil, :last_sync_at=>nil}]
    
     products = ['SS22CH013', 'FW22WJ021']
     query_result.select{ |product| products.include?(product[:code]) }