0

単一テーブル継承の場合、Railsに文字列の代わりに「type」列に整数列を使用させるにはどうすればよいですか?

4

2 に答える 2

1

テーブル名をクラス名に、またはその逆に変換するために Rails が使用するメソッドをオーバーライドできます。

関連するメソッドはfind_sti_class、type 列に格納された値をそれぞれの ActiveRecord モデルsti_nameに変換する役割を担い、指定された ActiveRecord サブクラスの type 列に格納された値を取得する役割を果たします。

次のようにオーバーライドできます。

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

私はこれをより詳細に説明する投稿を書きました。

于 2015-12-01T16:42:08.143 に答える
0

「タイプ」列の処理を担当するActiveRecordの部分を見つけて、モンキーパッチを適用する必要があります。つまり、アプリケーション内からの動作をオーバーライドする必要があります。

于 2009-07-09T15:11:32.630 に答える