如何访问我覆盖的Activerecord setter?

时间:2011-04-04 02:30:02

标签: ruby-on-rails ruby activerecord

我想使用自定义setter来对字段进行一些格式化。在irb中如果我测试setter如:

o.field_name = "4"

我看到我的自定义setter被引用了。但事实并非如此:

o[:field_name] = "4"

据我所知,在第一种情况下,这是一个函数调用,在第二种情况下,我们只是直接设置属性。但是我没有完全看到如何在不通过我们的自定义setter的情况下设置属性,我认为这就是重点。

但我的主要问题是如果var保存我的field_name,我看不到如何动态引用a.var并将其解释为a.field_name。我所要做的就是[var],这绕过了我的二传手。

2 个答案:

答案 0 :(得分:2)

尝试使用a.send(var)

var = 'field_name'

这相当于a.field_name

答案 1 :(得分:0)

o [:field_name]类似于read_attribute(:field_name),因此只是按照您的说法读取值。它在虚拟属性中非常重要,以便绕过堆栈太深的错误。如果你做[:var],你就得到它的价值。虚拟属性是指属性,如果要将其值设置为另一个变量,则只需获取其值,而不是对象。