【问题标题】:Destroy all records associated with object in Rails 4销毁与 Rails 4 中的对象关联的所有记录
【发布时间】:2015-03-16 08:11:43
【问题描述】:

我有一个电影及其相关类型的数据库。

class Genre < ActiveRecord::Base
  has_many :movie_genres
  has_many :movies, through: :movie_genres, dependent: delete_all
  before_destroy :delete_movie

  private

  def delete_movie
    self.movies.delete_all
  end

end

class Movie < ActiveRecord::Base
  has_many :movie_genres
  has_many :genres, through: :movie_genres
end

我的目标是,当一种类型被删除时,它的所有电影也会被删除,无论该电影是否有另一种类型。我尝试将dependent: :destroy 附加到 Genre 模型,但是只有连接表记录被删除。我还尝试使用 before_destroy 回调在删除类型之前删除电影,但这似乎也不起作用。

【问题讨论】:

  • “只有连接表记录被删除”是什么意思?
  • 当你使用delete_movie时到底发生了什么,它在哪种情况下不起作用?方法被调用了吗?它会生成 SQL 吗?

标签: ruby-on-rails


【解决方案1】:

我相信您只需要选择该列适用的记录,然后对它们调用destroy_all。我错过了什么吗?

Movie.where(movie_genre: @movie.movie_genre).destroy_all

【讨论】:

    【解决方案2】:

    试试:destroy_alldestroy_all 将删除此对象和所有相关对象。对于大数据,这可能会很慢。 另见:delete_all vs destroy_all?

    【讨论】:

      猜你喜欢
      • 2014-01-22
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多