Лучше использовать каждый из них и проверить тип против, где фильтровать для типа в ActiveRecord Relation - PullRequest
0 голосов
/ 04 июня 2019

Интересно, если, скажем, события - это отношение ActiveRecord, что это ...

events.each do |e|
    next unless e.game?
    ....

хуже этого ...

es = events.where(event_type: "game")
es.each do |e|
    ....

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

1 Ответ

1 голос
/ 06 июня 2019

Каждый намного медленнее.Вы всегда должны отдавать приоритет методу / запросам ActiveRecord, а не ванильному Ruby.

es = events.where(event_type: "game")
es.find_each do |e|
    ....

events.where(...) вернет отношение ActiveRecord.Из-за этого вы можете использовать find_each.В документах предлагается не использовать find_each для небольших коллекций, но мне нравится планировать масштабируемость

...