動的にActiveRecordのプロパティにアクセスする方法
参考:http://www.davidverhasselt.com/set-attributes-in-activerecord/
ふつう
@user.name = "foo"
とかやるところを、どういうわけかname1..name3くらいまであって、同じような処理をしたいときの話。
具体的にはバリデーションのテストだったんだけど。
@user["name1"] = "foo" みたいにやるとよくないケースがある。
というのも、これだとデフォルトのアクセサをスキップしてしまうので、バリデーションのプロセスなどを通らない。
デフォルトのアクセサと同じように扱いたい場合はこれだとよくない。
で、結論なんだけど以下のように書ける。
@user.attributes = {"name1" => "foo"}
テストのときは、こんなかんじでイケた。
3.times do |i| describe "#name#{i+1}" do context "when too long" do before { @user.attributes = {"name#{i+1}" => "a" * (User::MAX_LENGTH_NAME + 1)} } it { should_not be_valid } end end end
豊稔 家庭用麺打セットA そば・うどん麺打入門DVD付 A-1230
- 出版社/メーカー: 豊稔企販
- メディア: ホーム&キッチン
- クリック: 35回
- この商品を含むブログ (4件) を見る