Выполнить определенный процесс назначения несколько раз в Ruby - PullRequest
1 голос
/ 20 июня 2019

Я пытался запустить процесс, в котором я беру конкретный продукт и запускаю метод, в котором я связал с ним 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 голосов
/ 20 июня 2019

Хорошо, я решил обе эти части, назвав нужные мне идентификаторы в качестве диапазона:

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
0 голосов
/ 20 июня 2019

Я бы использовал 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 позже.

...