リハビリを兼ねて自分の思うがままにコードを書いているので、一応メモ書きを残すことにしました。
最近趣味で作っているプロダクトで、これって他のActiveRecordでも使うからConcernにするのも良いけど、
共通親クラスに定義して、他のモデルはこのクラスを継承するようにしてみようと思い、それを作ったので
サンプルを残しておく。
self.abstract_class = true
みたいに書いておかないと、hoge_basesというテーブルを探してしまう。
共通で使うメソッドは、method_missingに書いているが、created_at_ymdやupdated_at_ymdというメソッドを生やしている。
HogeBase.rb
class HogeBase < ActiveRecord::Base
self.abstract_class = true
####################################################################
################### クラスメソッド #####################################
####################################################################
class << self
end
####################################################################
################### インスタンスメソッド #################################
####################################################################
def method_missing(method_name, *args, &block)
return unless method_name.to_s.end_with?("_ymd")
method_name_except_format_value = method_name.to_s.sub!(/_ymd/, '')
column_names = self.class.column_names.select { |column_name| column_name =~ /.*_at/ }
return unless column_names.include?(method_name_except_format_value)
read_attribute(method_name_except_format_value).strftime("%Y/%m/%d")
end
end
上の例だと表示でしか使わない系だったら、decoratorに書くべきかもしれないけど、ちょっと実験的な要素も強いので一旦このままで。