销毁时 Rails 不会删除关联



我想防止rails在销毁记录时试图从连接表中删除。

所以如果我有

class User
  has_and_belongs_to_many :projects
end

class Project
   has_and_belongs_to_many :users
end

当我调用user.destroy时,rails试图从连接表projects_users中删除一条记录。我能阻止它这样做吗?delete_sql似乎没有。

我想这样做的原因是我希望能够使用数据库视图将复杂的关系显示为rails关联,以用于报告目的。

我认为创建另一个模型UserProject更容易,并执行以下操作:

class User
  has_many :user_projects
  has_many :projects, through: :user_projects
end
class Project
  has_many :user_projects
  has_many :users, through: :user_projects
end
class UserProject
  has_many :users
  has_many :projects
end

这样,当您调用user.destroy时,它将查找User中提供给has_many:dependent选项,以确定如何处理相关对象。如果您将其设置为:nullify,它将删除user对象,但关联的user_project s和project s 将其user_id外键设置为NULL,因此不会被销毁。

以下是使用has_many的文档,以及为什么不应该使用has_and_belongs_to_many

相关内容

  • 没有找到相关文章

最新更新