単一テーブル継承の場合、Railsに文字列の代わりに「type」列に整数列を使用させるにはどうすればよいですか?
質問する
802 次
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 に答える