我一直试图运行一个过程,在此过程中我会拿一个特定的产品并运行一个方法,在该过程中我将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
答案 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