在模型中覆盖 ActiveSupport::Concern
Override ActiveSupport::Concern in model
我有一个问题,看起来像这样:
module Foo
extend ActiveSupport::Concern
def bar
puts "bar"
end
end
其他三个模型使用该 class 方法,因为他们需要同样的东西。然后我有一个一次性模型需要该方法来做其他事情。我有这样的设置:
class FooFoo < ApplicationRecord
def self.bar
puts "foo bar"
end
end
现在,当我调用 FooFoo.bar
时,它会打印 "foo" 而不是 "foo bar"。如何覆盖关注中定义的方法?我希望它只 运行 在我的模型中定义的方法,FooFoo
,而不是关注中的方法,Foo
。我环顾四周,但我认为我没有看到我需要的东西。如果能提供帮助,我们将不胜感激!
编辑:我也试过这个希望它能起作用但它没有:
class FooFoo < ApplicationRecord
def FooFoo.bar # I used FooFoo.bar here instead of self.bar
puts "foo bar"
end
end
问题是您需要明确声明您希望 bar
成为 class 方法...
module Foo
extend ActiveSupport::Concern
class_methods do
def bar
puts "bar"
end
end
end
现在,您可以覆盖它...
class FooFoo < ApplicationRecord
def self.bar
puts "foo bar"
end
end
我有一个问题,看起来像这样:
module Foo
extend ActiveSupport::Concern
def bar
puts "bar"
end
end
其他三个模型使用该 class 方法,因为他们需要同样的东西。然后我有一个一次性模型需要该方法来做其他事情。我有这样的设置:
class FooFoo < ApplicationRecord
def self.bar
puts "foo bar"
end
end
现在,当我调用 FooFoo.bar
时,它会打印 "foo" 而不是 "foo bar"。如何覆盖关注中定义的方法?我希望它只 运行 在我的模型中定义的方法,FooFoo
,而不是关注中的方法,Foo
。我环顾四周,但我认为我没有看到我需要的东西。如果能提供帮助,我们将不胜感激!
编辑:我也试过这个希望它能起作用但它没有:
class FooFoo < ApplicationRecord
def FooFoo.bar # I used FooFoo.bar here instead of self.bar
puts "foo bar"
end
end
问题是您需要明确声明您希望 bar
成为 class 方法...
module Foo
extend ActiveSupport::Concern
class_methods do
def bar
puts "bar"
end
end
end
现在,您可以覆盖它...
class FooFoo < ApplicationRecord
def self.bar
puts "foo bar"
end
end