在Ruby中多次运行特定的分配过程

时间:2019-06-20 04:09:34

标签: ruby ruby-on-rails-4 activerecord

我一直试图运行一个过程,在此过程中我会拿一个特定的产品并运行一个方法,在该过程中我将74个其他未关联的标签与之关联:

Product.where(id:194617) do |product|
  product.74.times do
    tag = Tag.unassociated.last
    tag.location = Warehouse.primary
    tag.trackable = product
    tag.save!
  end
end

 irb):43: syntax error, unexpected tINTEGER, expecting '('
  product.74.times do

翻转嵌套会返回循环次数,但不会产生结果(将未关联的标签附加到产品):

 74.times do
  Product.where(id:194617) do |product|
    rfid_tag = RFIDTag.unassociated.last
    rfid_tag.location = Warehouse.primary
    rfid_tag.trackable = product
    rfid_tag.save!
  end
end

产品have_many标签和标签have_one产品。

找到合适的方法可以将单个标签与一组产品相关联。如何在系统中构建times循环?

如果可以运行范围(Product.where(id >= 194617 AND id <= 194638),这实际上是理想的选择,但我需要先解决内循环。

方法源自:

Product.all.each do |product|
    tag = Tag.unassociated.last
    tag.location = Warehouse.primary
    tag.trackable = product
    tag.save! 
end

2 个答案:

答案 0 :(得分:0)

对于这种用例,我将使用tap

Product.where(id:194617).first.tap do |product|
  74.times do
    tag = Tag.unassociated.last
    tag.location = Warehouse.primary
    tag.trackable = product
    tag.save!
  end
end

tap产生self(在这种情况下为特定产品)到块,然后返回self

答案 1 :(得分:0)

好吧,我通过将所需的id作为范围来解决了这两个部分:

Product.where(id:194617..194638).each do |product|
  74.times do
    tag = Tag.unassociated.last
    tag.location = Warehouse.primary
    tag.trackable = product
    tag.save!
  end
end