Распределение Ruby обновлений записи Rails на% - PullRequest
2 голосов
/ 21 февраля 2020

Моя цель состоит в том, чтобы пометить каждую запись на основе идентификатора, но хочу правильно распределить по:

  • 50% из них будут помечены как "очень хорошие"
  • 50% из них будут помечены как «хорошо» или «хорошо»

В «хорошо» и «хорошо» цель состоит в том, чтобы пометить 75% как «хорошо» и 25% как «хорошо»

У меня нет проблемы с пометкой 50-50, потому что я могу проверить идентификатор, если он делится на 2

Пример:

if (feedback.id.modulo(2) == 0)
  // How can I apportion 75% will be tagged as "good" and 25% as "ok" here?
else
  feedback.update_attributes(status: "very good")
end

Есть ли способ Ruby или Rails для размещения на основе% условий?

1 Ответ

1 голос
/ 21 февраля 2020
if (feedback.id.modulo(2) == 0)
  // How can I apportion 75% will be tagged as "good" and 25% as "ok" here?
else
  feedback.update_attributes(status: "very good")
end

Это хорошо, но с каждым отзывом вы будете извинять 1 запрос на обновление, я думаю, вы можете сделать его лучше

feed_back_ids = FeedBack.ids
FeedBack.where(id: feed_back_ids.pop(feed_back_ids.length/2)).update_all(status: "very good")
FeedBack.where(id: feed_back_ids.pop(feed_back_ids.length*3/4)).update_all(status: "good")
FeedBack.where(id: feed_back_ids).update_all(status: "ok")

Если вы хотите сделать это случайно

feed_back_ids = FeedBack.ids.shuffle
FeedBack.where(id: feed_back_ids.pop(feed_back_ids.length/2)).update_all(status: "very good")
FeedBack.where(id: feed_back_ids.pop(feed_back_ids.length*3/4)).update_all(status: "good")
FeedBack.where(id: feed_back_ids).update_all(status: "ok")
...