モデルに次のような HSTORE 型を追加しました。
serialize :settings, ActiveRecord::Coders::Hstore
次に、モデルに以下を追加して、角括弧を使用せずにキー値を取得しました。
# Add the possibility to inquire HSTORE keys values without brackets
# ex. @company_settings.settings['locale'] => @company_settings.locale
def method_missing(id, *args, &block)
if settings.has_key?(id.to_s)
settings.fetch(id.to_s)
else
super
end
end
等しい演算子に対して同じことを行う方法はありますか? すなわち
@company_setting.locale = 'en'
編集
これは、'@company_setting.locale を実行すると発生するエラーです。
NoMethodError: undefined method `locale=' for #<CompanySettings:0x42e9a78>
from D:/Software/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activemodel-3.2.1/lib/active_model/attribute_methods.rb:407:in `method_missing'
from D:/Software/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/attribute_methods.rb:126:in `method_missing'
from D:/ASM/source/app/app/models/company_settings.rb:23:in `method_missing'