Ruby on rails 如何摧毁。。。有很多

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

模型有:成员(id、项目id、用户id)、项目(id)、用户(id)、somemodel(id、项目id、用户id)

  • 成员属于:项目,属于:用户

  • somemodel属于:项目,属于:用户

我希望当一个成员被删除时,somemodel(其项目id和用户id与该成员相同)也被删除。怎么做

为此,我希望将
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还有其他回调:创建之后、保存之后、保存之前。。。请在此处查看: