Область активных записей изменяет отношение активных записей. Зачем?

Применение области действия к активной связи записей постоянно изменяет эту связь. Зачем?

company_purchases.to_sql
=> "SELECT \"purchases\".* FROM \"purchases\" WHERE \"purchases\".\"company_id\" = 17"

company_purchases.by_state("finalized").to_sql
=> "SELECT \"purchases\".* FROM \"purchases\" WHERE \"purchases\".\"company_id\" = 17 AND \"purchases\".\"state\" = 'finalized'"

company_purchases.to_sql
=> "SELECT \"purchases\".* FROM \"purchases\" WHERE \"purchases\".\"company_id\" = 17 AND \"purchases\".\"state\" = 'finalized'"

Я ожидаю, что SQL будет выглядеть по-разному при вызове в области, но я не понимаю, почему дополнительные where из объема остается на следующем вызове company_purchases без объема.

Определение области

scope :by_state, ->(state) { where(state: state) }

ОБНОВИТЬ

Это похоже на ошибку с осьминогом, смотрите здесь: https://github.com/thiagopradi/octopus/issues/455

Для дополнительного контекста, ошибка Octopus вводится из-за того, как составлена ​​company_purchases.

company_purchases = company.purchases

# in Company model
def purchases
    Product.using(shard).where(company_id: id)
end

2 ответа

Если ты default_scope чем он будет отображаться на каждый запрос, который вы делаете на этой модели. Вместо этого используйте scope чтобы избежать вышеуказанной проблемы.

Это похоже на проблему с Octopus, а не с областями или записями Active Record.

Смотрите: https://github.com/thiagopradi/octopus/issues/455

Другие вопросы по тегам