RailsでenumerizeのカラムをSTIとして使う
これのenumerize版。
既存のモデルを分けたかったので、参考にさせてもらった。
すでにenumerizeの利用しているカラムをSTIのカラムにしたかったので、inheritance_column
でのSTIのデフォルトカラム(type)を変更もした。
class Payment < ActiveRecord::Base extend Enumerize self.inheritance_column = "pay_type" enumerize :pay_type, in: { credit_card: 0, bank_transfer: 10, paypal: 20 }, scope: true, predicates: true class << self def find_sti_class(type) type_name = pay_type.find_value(type).camelize "Payment::#{type_name.to_s.camelize}".constantize end def sti_name pay_type.find_value(name.demodulize.underscore).value end end end
sti_name
メソッドの定義もなんでいるのかと思ったのですが、Payment::CreditCard.new
とした時にinheritance_column
で定義したカラムに期待する値がちゃんと入るようにしないとなのでちゃんと定義しましょう。 (ここで使われるので)