Ответ 1
В документации для default_scope
указано, что предоставленная область применения применяется как к запросам, так и к новым объектам. Значения по умолчанию, заданные на уровне модели, всегда будут иметь приоритет над значениями по умолчанию, указанными на уровне схемы, потому что они сделаны внутри приложения до того, как данные когда-либо отправляются в базу данных.
Вы можете использовать unscoped
для временного пропуска всех областей охвата (включая default_scope
). Это должно позволить эффективному механизму деблокирования базы данных нижнего уровня *.
Crew.unscoped.new
* ActiveRecord скрывает разницу между дефолтом, определенным в базе данных (схема), и по умолчанию выполняется в приложении (модели). Во время инициализации он анализирует схему базы данных и отмечает любые значения по умолчанию, указанные там. Позже, создавая объекты, он присваивает эти значения по умолчанию для схемы, не касаясь базы данных. Например, вы увидите approved: false
(вместо approved: nil
) в результате Crew.unscoped.new
, даже если данные никогда не были отправлены в базу данных, чтобы получить его значение по умолчанию (ActiveRecord превентивно заполняет значение по умолчанию значение на основе информации, которую он вытащил из схемы).