リア充爆発日記

You don't even know what ria-ju really is.

動的に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

豊稔 家庭用麺打セットA そば・うどん麺打入門DVD付 A-1230