循环遍历用户模型中的数组以找到匹配项

Loop through an array in user model to find a match

作为 UI 工程师,我对 Rails 控制台有点陌生,但是,我正在尝试遍历每个用户,如果产品数组包含几个产品 ID。因为产品数组不超过 20 个值,所以产品数组是用户模型的一部分。例如——

用户购买商品801808902

用户可能有一个包含 [800,801,802,808,809...]

的产品数组

我想查找包含 801、808 的所有用户

对于那些匹配集合的用户,为所有这些用户关联一个新产品(免费礼物)

我想通过生产 rails 控制台将其作为快速脚本应用

感谢方向正确的帮助!

我尝试执行以下操作 -- User.where(:product => [801,808]) 运气不好

如果您有两个模型作为 User 和 Product 。这样的事情应该可以解决你的问题

product_ids = [801, 808]
User.joins(:products).where(products: {id: product_ids})

如果您的数据库中没有太多对象,并且您希望在控制台中运行一个快速的一次性脚本,您可以这样做:

desired_product_ids = [801, 808]
User.find_each do |user|
  unless (user.product_ids & desired_product_ids).empty?
    give_gift user
  end
end

def give_gift(user)
  # your gift logic
  user.save
end

这将批量加载内存中的所有活动记录用户对象,因此如果您的数据库很大,这将花费很长时间。

我建议使用 where 查询,如 NEO-xx 建议的那样。您可以将其与 find_each:

User.where(<your condition here>).find_each do |user|
  give_gift user
end