ActiveRecord で、条件によってカラムが変わったりするのを serialize した列にテキトウにぶっ込んでおくというありがちな実装の時に、実カラムのように透過的に扱えて validation とかも簡単にかけられる ActiveRecord::Store ちゃん便利。
例えば、SNSのアカウントを sns_accounts 列に Serialize して入れる場合(普通入れないが…)
ActiveRecord::Store を使わない時
class User
serialize :sns_accounts, Hash
end
とかして、以下のような感じにします。
user = User.new
user.sns_accounts = {twitter:'ecpplus', github:'ecpplus'}
ActiveRecord::Store を使った時
class User
store :sns_accounts, accessors: [:twitter, :github]
end
としておけば、下記のような感じに出来ます。
user = User.new
user.twitter = 'ecpplus'
user.github = 'ecpplus'
validation したい時も特に何も考えず、通常の列と同じようにすればOKです。
class User
store :sns_accounts, accessors: [:twitter, :github]
validates :twitter, presence:true
validates :github, presence:true
end
Controller から使う時は、Strong Parameters で permit してあげるのを忘れないであげてね!
params.require(:user).permit(:twitter, :github)