我想防止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