开发者

How do I access the Activerecord setter I overrode?

I want to use a custom开发者_如何转开发 setter to do some formatting of my fields. In irb if I test the setter like:

o.field_name = "4"

I see that my custom setter is being referred to. But with this it is not:

o[:field_name] = "4"

I understand that in the first case this is a function call and in the second case we are just setting the attribute directly. But I don't completely see how the attribute can be set without going through our custom setter, I thought that was the point.

But my main question is that if var holds my field_name, I don't see how to dynamically refer to a.var and have it be interpreted as a.field_name. All I see to do is a[var] and this bypasses my setter.


Try a.send(var) where var = 'field_name'

That's the equivalent of a.field_name


o[:field_name] is like read_attribute(:field_name), thus is just reads the value as you said. It can be quite important in virtual attributes in order to bypass the stack too deep error. If you do a[:var], you just get its value. A virtual attribute refers to an attribute, if you are setting its value to another variable, you just get its value, not the object.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜