Rails Single Table Inheritance - PullRequest
       7

Rails Single Table Inheritance

0 голосов
/ 09 июля 2009

Для наследования одной таблицы, как вы заставляете Rails использовать целочисленный столбец для столбца типа вместо строки?

Ответы [ 2 ]

1 голос
/ 01 декабря 2015

Вы можете переопределить методы, которые Rails использует для преобразования имени таблицы в имя класса и наоборот:

Соответствующими методами являются find_sti_class, который отвечает за перевод значения, хранящегося в столбце типа, в соответствующую модель ActiveRecord, и sti_name, который отвечает за извлечение значения, хранящегося в столбце типа, с учетом подкласса ActiveRecord.

Вы можете переопределить их следующим образом:

class Institution::Base < ActiveRecord::Base

  ALLOWED_CLASSES = %w[Institution::NonProfit Institution::Commercial]

  class << self

    def find_sti_class type_name
      idx = type_name.to_i
      super if idx == 0
      ALLOWED_CLASSES[idx-1].constantize
    rescue NameError, TypeError
      super
    end

    def sti_name
      idx = ALLOWED_CLASSES.index(self.name)
      if idx.nil?
        super
      else
        idx + 1
      end
    end

  end

end

Я написал пост , в котором это более подробно описано.

0 голосов
/ 09 июля 2009

Вам нужно будет найти часть ActiveRecord, отвечающую за обработку столбца «type», и обезьяна залатать его, то есть переопределить, как он работает из вашего приложения.

...