Каковы значения по умолчанию для Rails 3 для: зависит от has_many и own_to - PullRequest
13 голосов
/ 26 июня 2011

В рельсах 3 я знаю, что могу форсировать удаление зависимых объектов в отношении принадлежащих_символов и has_many, используя параметр: зависимый =>: удалить. Однако мне было интересно,

каково поведение по умолчанию, если я не укажу: зависимый => ...

Ура, Хайо

Ответы [ 3 ]

19 голосов
/ 26 июня 2011

Хотя это не прописано в документации , по умолчанию поведение ничего не делает со связанными объектами. То есть удаление или уничтожение объекта не приведет к удалению или уничтожению объектов, которым он принадлежит или имеет многие из них.

4 голосов
/ 12 декабря 2014

В Rails 3 значением по умолчанию :dependent является :nullify, которое устанавливает внешние ключи равными nil.

Стратегия по умолчанию :nullify для обычных has_many.Кроме того, это работает только в том случае, если исходное отражение равно belongs_to.

Источник: http://guides.rubyonrails.org/3_1_release_notes.html#active-record

Это все еще относится к Rails 4.

Однако delete и delete_all будут либо выполнятьудаление в соответствии со стратегией, заданной параметром :dependent, или, если опция :dependent не указана, то она будет следовать стратегии по умолчанию.Стратегия по умолчанию - :nullify (установите внешние ключи на nil), за исключением has_many :through, где стратегией по умолчанию является delete_all (удаление записей объединения без запуска их обратных вызовов).

Источник: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Delete+or+destroy%3F

Также см. Документацию по исходному коду: https://github.com/rails/rails/blob/b5a8fd7bb4a6fa4b67d4eabae4cea2cb1834d8d9/activerecord/lib/active_record/associations/collection_proxy.rb#L369

4 голосов
/ 02 мая 2013

has_many использует стратегию: nullify, которая установит для иностранца значение null.Для has_many: via он будет использовать delete_all.

Для has_many команда destroy всегда будет вызывать метод уничтожения удаляемых записей, чтобы выполнялись обратные вызовы.Однако удаление будет либо выполнять удаление в соответствии со стратегией, указанной параметром: зависимый, либо, если параметр не указан, то оно будет следовать стратегии по умолчанию.Стратегия по умолчанию: nullify (установите для внешних ключей значение nil), за исключением has_many: through, где стратегией по умолчанию является delete_all (удаление записей объединения без запуска их обратных вызовов).

- ActiveRecord :: Associates :: ClassMethods

Не уверен, что именно делает с__, и не смог найти что-либо в документах.Я постараюсь в ближайшее время покопаться и обновить ответ.

...