Я проверял параметры метода belongs_to и тестировал следующее поведение в Rails 3.2.7
Как указано выше, опция :dependent
указывает, что
Если установлено: destroy, связанный объект уничтожается, когда это объект есть. Если установлено значение: delete, связанный объект удаляется без вызывая его метод уничтожения.
Как я понимаю, автор должен быть удален, если Post удаляется в следующем случае:
class Post < ActiveRecord::Base
belongs_to :author, :dependent => :delete
end
class Author < ActiveRecord::Base
attr_accessible :name
has_one :post
before_destroy :log_author_removal
private
def log_author_removal
logger.error('Author is getting removed')
end
end
В консоли:
> Post.first
Post Load (0.4ms) SELECT "posts".* FROM "posts" LIMIT 1
=> #<Post id: 5, title: "Post 5", author_id: 3>
> p.delete
SQL (197.7ms) DELETE FROM "posts" WHERE "posts"."id" = 5
=> #<Post id: 5, title: "Post 5", author_id: 3>
> Author.find(3)
Author Load (0.5ms) SELECT "authors".* FROM "authors" WHERE "authors"."id" = ? LIMIT 1 [["id", 3]]
=> #<Author id: 3, name: "Author 3">
Однако вызов p.destroy
удаляет связанного автора.
Я неправильно понял выше цитированное выражение?