Наследовать active_record в рельсах - PullRequest
3 голосов
/ 28 августа 2010

Прямо сейчас мои занятия выглядят так.

class BalanceName < ActiveRecord
    def before_validation
      set_blank_attributes_to_nil(@attributes)
    end
end

class Balance < ActiveRecord
    def before_validation
      set_blank_attributes_to_nil(@attributes)
    end
end

Я хочу унаследовать активную запись в одном классе, а затем унаследовать этот класс в других классах, например.

Я хочу что-то вроде этого.

class CommonActiveRecord < ActiveRecord::Base

  def before_validation
    set_blank_attributes_to_nil(@attributes)
  end

end

class BalanceName < CommonActiveRecord
    def before_validation
      super
    end
end

class Balance < CommonActiveRecord
    def before_validation
      super
    end
end

Ответы [ 2 ]

2 голосов
/ 28 августа 2010

Вы можете сделать точно так же, как вы это сделали, за исключением того, что вам не нужно переопределять методы before_validation в ваших подклассах (хотя я думаю, что они могут быть здесь до того, как будут заполнены более конкретной проверкой).

Вам также необходимо указать рельсам, что ваш класс CommonActiveRecord является абстрактным и поэтому не сохраняется, добавив:

class CommonActiveRecord < ActiveRecord::Base
  self.abstract_class = true
end
0 голосов
/ 28 августа 2010

Вы можете создать модуль (например, lib / common_active_record.rb):

module CommonActiveRecord
  def before_validation
    set_blank_attributes_to_nil(@attributes)
  end
end

А потом в вашей модели просто включите его:

class BalanceName < ActiveRecord::Base
  include CommonActiveRecord
end

class Balance < ActiveRecord::Base
  include CommonActiveRecord
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...