Ruby on rails Rails 5:具有映射匹配记录的条件的迭代

Ruby on rails Rails 5:具有映射匹配记录的条件的迭代,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在我的rating/rating.rb模型中有这个方法,我基本上需要用匹配的inventory和ratingID创建数组数组: def inventory_ratings inventory = Inventory::Inventory.where(id: inv).order(date: :desc) rating = Rating::Rating.where(id: rtg).order(valid_from: :desc) columns = [:inventory

我在我的
rating/rating.rb
模型中有这个方法,我基本上需要用匹配的
inventory
rating
ID创建数组数组:

def inventory_ratings    
  inventory = Inventory::Inventory.where(id: inv).order(date: :desc)
  rating = Rating::Rating.where(id: rtg).order(valid_from: :desc)

  columns = [:inventory_id, :rating_id]
  values = inventory.map {|inv|
    if (inv.position_id == rating.position_id &&
        rating.valid_from..rating.valid_to.include?(inv.date))
      r = rating.id
    end
    [ inv.id, r ]
  }
  Rating::InventoryRating.import columns, values, validate: false
end
在我得到这个错误的那一刻:
NoMethodError:for#
的未定义方法“position\u id”,因为我可能必须以某种方式迭代每个评级以获得
position\u id
valid\u from
valid\u to

我如何添加额外的迭代,以便每个
库存
记录迭代每个评级记录,并映射是否匹配if语句?谢谢大家!

这个怎么样:

values = []
inventory.each do |inv|
  values.concat([inv.id].product(rating.where('position_id = ? AND valid_from <= ? AND valid_to >= ?', inv.position_id, inv.date, inv.date).ids))
end.uniq.compact
值=[]
存货。每个do |存货|
values.concat([inv.id].product(rating.where('position_id=?AND valid_from=?',inv.position_id,inv.date,inv.date).id))
紧凑型

库存
和评级
之间有什么关系吗?@rony36是的,我的库存中有这个。rb模型:
有很多:评级,类名:'Rating::Rating',通过::库存评级
谢谢。我看到在控制台
inventory
中正在迭代
ratings
,但是最后我得到了这个错误:
ArgumentError:最后一个参数应该是一个二维数组“[[]]”。数组中的第一个元素是整数
。看起来我没有得到我的数组结果。对不起,我错过了一些东西。我已经更新了我的答案。试试看:)看来我们快到了。现在我得到了类似这样的数组:
[[]、[[23,7]]、[[19,6]]、[[18,6]]、[[17,6]]、[[11,1]]
如果没有这些额外的[],我怎么做?我需要的是像
[[23,7],[19,6]]
别担心,我的错-我犯了错误。你的代码工作起来很有魅力:)谢谢!很高兴听到这个消息:)