いいえ、store
コール内にデフォルトを指定する方法はありません。 store
macroは非常に簡単です:
def store(store_attribute, options = {})
serialize store_attribute, Hash
store_accessor(store_attribute, options[:accessors]) if options.has_key? :accessors
end
そして、すべてのstore_accessor
はありません:accessors
を反復処理し、それぞれのためのアクセサとミューテータメソッドを作成することです。 :accessors
でハッシュを使用しようとすると、あなたが意味しなかったものをstore
に追加することになります。
デフォルトを供給したい場合は、あなたがafter_initialize
フック使用することができます
class User < ActiveRecord::Base
store :settings, accessors: [ :color, :homepage ]
after_initialize :initialize_defaults, :if => :new_record?
private
def initialize_defaults
self.color = 'blue' unless(color_changed?)
self.homepage = 'rubyonrails.org' unless(homepage_changed?)
end
end
+1、@mu通常このシナリオでは、 'set if not set'イディオムを使用します。つまり' self.color || = 'blue'; self.homepage || = 'rubyonrails.org' '。これは 'dirty'チェックを避けます。 –
@KandadaBoggu:' || = 'への唯一の欠点はブール値の属性を持つ場合です。 Perlの '// ='のように "定義されていなければセットされていない"というのは残念です。 –
ええ、それは本当ですが、 '|| ='イディオムを使うとブーリアンを違う方法で扱わなければなりません。 –