Переопределить ActiveSupport :: Концерн в модели - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть проблема, которая выглядит следующим образом:

module Foo
  extend ActiveSupport::Concern

  def bar
    puts "bar"
  end
end

Три другие модели используют методы этого класса, так как им нужно то же самое.Тогда у меня есть одноразовая модель, которой нужен метод, чтобы сделать что-то еще.У меня есть установка, подобная этой:

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

1 Ответ

0 голосов
/ 23 февраля 2019

Проблема в том, что вам нужно явно указать, что вы хотите, чтобы bar был методом класса ...

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
...