dbでは文字列型のカラムをsymbolとして引きたくて、alias_method_chain
を使ってgetterでラップしたらいいのでは?と思ったら軽くつまづいたのでメモ。意外と日本語情報なかった。
テーブル hoges
には `fuga` text
が定義されているとする。
class Hoge < ActiveRecord::Base
attr_accessible :fuga
end
def fuga_with_to_sym
fuga_without_to_sym.to_sym
end
alias_method_chain :fuga, :to_sym
怒られた。
NameError (undefined method `fuga' for class `Hoge'):
解決法はここにあった。
class Hoge < ActiveRecord::Base
attr_accessible :fuga
end
def fuga
super
end
def fuga_with_to_sym
fuga_without_to_sym.to_sym
end
alias_method_chain :fuga, :to_sym
これで Hoge#fuga
はsymbolを返してくれる。nil
が入らないよう注意しよう。
ちなみに解決法についてるリプライ「attr_accessor
使えばいいんじゃね?」って言ってる。確かにNameError
は出なくなるけど、それは@fuga
へのアクセサなので意味がないのでした。