Ruby on rails 如何摧毁。。。有很多
模型有:成员(id、项目id、用户id)、项目(id)、用户(id)、somemodel(id、项目id、用户id)Ruby on rails 如何摧毁。。。有很多,ruby-on-rails,ruby,rails-activerecord,has-many,belongs-to,Ruby On Rails,Ruby,Rails Activerecord,Has Many,Belongs To,模型有:成员(id、项目id、用户id)、项目(id)、用户(id)、somemodel(id、项目id、用户id) 成员属于:项目,属于:用户 somemodel属于:项目,属于:用户 我希望当一个成员被删除时,somemodel(其项目id和用户id与该成员相同)也被删除。怎么做 为此,我希望将has\u many:somemodels,dependent::destroy添加到成员中,但我不知道在成员类中为has\u many:somemodels提供正确的参数有许多:somemode
- 成员属于:项目,属于:用户
- somemodel属于:项目,属于:用户
has\u many:somemodels,dependent::destroy
添加到成员中,但我不知道在成员类中为has\u many:somemodels
提供正确的参数有许多:somemodels,dependent::destroy
单独不起作用,因为它试图按somemodels表中不存在的成员id搜索somemodel,因此出现无列
错误
什么是正确的
有许多:一些模型…
要添加到成员中?我认为您应该在成员中添加一个销毁后回调
模型:
# In member model
class Member < ApplicationRecord
after_destroy :also_destroy_somemodel
...
def also_destroy_somemodel
# Fast, use in case somemodel dont have any callbacks
Somemodel.where(project_id: project_id, user_id: user_id).delete_all
# Or
# Slow, use in case somemodel has callback(s)
# Somemodel.where(project_id: project_id, user_id: user_id).each &:destroy
end
end
成员模型中的#
类成员<应用程序记录
销毁后:也可以销毁某个模型
...
def也会破坏某些模型
#快速,以防somemodel没有任何回调
Somemodel.where(project\u id:project\u id,user\u id:user\u id)。全部删除
#或
#慢速,用于somemodel具有回调的情况
#Somemodel.where(project\u id:project\u id,user\u id:user\u id)。每个&:destroy
结束
结束
希望有帮助。另一种方法是创建一个
:通过该特定关系的关联,然后将该关联设置为dependent::destroy
。我认为它的结构如下:
class Member < ActiveRecord::Base
belongs_to :user
belongs_to :project
has_many :some_models, ->(member) { where(user_id: member.user_id) },
through: :project,
dependent: :destroy
end
类成员(成员){where(user\u id:member.user\u id)},
通过……项目,
依赖::销毁
结束
我还没有测试过它,但就我所见,它似乎是正确的。@spickermann我希望在成员实例销毁后销毁某个模型实例。如果成员作为一个模型代表一个特定项目中的用户
,为什么SomeModel
也需要project\u id
和user\u id
?Member
是否应该保存这两个信息,然后SomeModel
应该像SomeModel(id,Member\u id)
?@TamerShlash很好。你的方法会给出解决方案。很好的解决方案,但是我可以在同一个类上有多个after\u destroy:something,after\u destroy:something?没关系。Rails还有其他回调:创建之后、保存之后、保存之前。。。请在此处查看: