Ruby on rails 一次将关联回调附加到给定模型的所有关联
假设有一个帐户模型与一个用户表有多个关联,例如:Ruby on rails 一次将关联回调附加到给定模型的所有关联,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,假设有一个帐户模型与一个用户表有多个关联,例如: class帐户:用户 有许多:经理,…,:来源=>:用户 结束 如果我将.delete()与这些关联中的任何一个一起使用,它将删除帐户和用户之间的现有关系。我想在删除此关系时注册回调。我可以用:before\u remove=>:callback附加每个has\u many声明,但我想知道是否有任何快捷方式可以自动将回调添加到源设置为:user否的每个现有关联中。没有这样的选项。可能是因为这不是一个好主意,因为它确实会增加复杂性并导致大量不良副
class帐户:用户
有许多:经理,…,:来源=>:用户
结束
如果我将
.delete()
与这些关联中的任何一个一起使用,它将删除帐户和用户之间的现有关系。我想在删除此关系时注册回调。我可以用:before\u remove=>:callback
附加每个has\u many声明,但我想知道是否有任何快捷方式可以自动将回调添加到源设置为:user
否的每个现有关联中。没有这样的选项。可能是因为这不是一个好主意,因为它确实会增加复杂性并导致大量不良副作用
而且它也不需要,因为您可以通过装饰方法来实现同样的效果:
module MyApp
module Assocations
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def decorate_association(**options, &block)
yield AssocationDecorator.new(self, options)
end
end
class AssocationDecorator
attr_accessor :options, :klass
def initialize(klass, **options)
@klass = klass
@options = options
end
def has_many(name, scope = nil, **options, &extension)
@klass.has_many(name, scope, options.reverse_merge(@options), &extension)
end
end
end
end
class帐户
否。没有此选项。可能是因为这不是一个好主意,因为它确实会增加复杂性并导致大量不良副作用
而且它也不需要,因为您可以通过装饰方法来实现同样的效果:
module MyApp
module Assocations
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def decorate_association(**options, &block)
yield AssocationDecorator.new(self, options)
end
end
class AssocationDecorator
attr_accessor :options, :klass
def initialize(klass, **options)
@klass = klass
@options = options
end
def has_many(name, scope = nil, **options, &extension)
@klass.has_many(name, scope, options.reverse_merge(@options), &extension)
end
end
end
end
class帐户
你是否尝试将回调添加到has-many:users
并检查它是否对所有人都有效?@feifeizhong是的,我尝试了-不起作用你是否尝试将回调添加到has-many:users
并检查它是否对所有人都有效?@feifeizhong是的,我尝试了-不起作用谢谢你,我最后做了类似的事情谢谢你,最后我做了类似的事情