Ruby on rails Rails匹配2个阵列

Ruby on rails Rails匹配2个阵列,ruby-on-rails,Ruby On Rails,我有两个模型捐赠和银行存款 捐赠有一个列发送方id 银行存款有一个由id捐赠的列 因此,假设我有: @donations = Donation.all @bank_deposits = BankDeposit.all 这两个数组为上述列返回以下值: @donations.sender_id = [1,3,6,8,9] @bank_deposits.donated_by_id = [2,3,7,8] 在本例中,假设捐赠的id为1到5,我希望得到的结果是选择id为2和4的行(因为它们包含银行存款

我有两个模型捐赠和银行存款

捐赠有一个列发送方id

银行存款有一个由id捐赠的列

因此,假设我有:

@donations = Donation.all
@bank_deposits = BankDeposit.all
这两个数组为上述列返回以下值:

@donations.sender_id = [1,3,6,8,9]
@bank_deposits.donated_by_id = [2,3,7,8]
在本例中,假设捐赠的id为1到5,我希望得到的结果是选择id为2和4的行(因为它们包含银行存款中的3和8。按id捐赠)

我应该如何实现代码来实现这一点?

请尝试下面的代码

@donations.sender_id & @bank_deposits.donated_by_id
这将为您提供来自两个数组的公共元素id的输出,然后您可以根据自己的喜好对其进行过滤


希望它对您有用。

如果您只需要捐款,您可以更改代码并尝试:

@donations = Donation.where(sender_id: BankDeposit.pluck(:donated_by_id))
如果要保留这两个记录并使用所有记录,只需使用
选择

bank_deposit_donated_by_ids = @bank_deposits.map(&:donated_by_id)
matched_donations = @donations.select do |elem|
  bank_deposit_donated_by_ids.include?(elem.sender_id)
end

没有测试语法/API,但这就是想法。

感谢您的回复。。但是我不明白这一个怎么可能还我想要的。。你可以看到这个2.3.0:001>a=[1,2,3]=>[1,2,3]2.3.0:002>b=[2,3,4,5]=>[2,3,4,5]2.3.0:003>a&b=>[2,3]2.3.0:004>请看我在控制台中用示例数组及其作品进行了尝试。虽然这个解决方案简单,但我无法让它在实例上运行,虽然下面的答案在第一次尝试时有效,但这一个有效,并达到了我想要的结果。在接受答案之前,我会继续尝试,因为我想另一个答案会更好,因为它更简单。重要的是要理解这段代码是怎么回事。第一个简单地获取捐款,捐赠者也在
银行存款表中。但是,如果您需要执行两个查询的所有其他记录,那么第二个解决方案将获得所有结果,并使用ruby和内置方法进行筛选。是的,这一个非常清楚,非常感谢。。我已经怀疑我必须使用Pull或map,但我不确定正确的语法。我只是想完全理解另一个答案,然后再判断我应该接受哪一个。