我正在谈论的一个例子:
class Person < ActiveRecord::Base
def name=(name)
super(name.capitalize)
end
def name
super().downcase # not sure why you'd do this; this is just an example
end
end
这似乎有效,但我刚刚阅读了ActiveRecord::Base docs中覆盖属性方法的部分,并建议使用 read_attribute
和 write_attribute
方法 . 我认为一定有什么不对的,因为我还要强迫一个更丑陋的习语,所以必须有充分的理由......
我真正的问题是:这个例子有问题吗?
4 回答
回应Gareth的评论......你的代码不会按照书面形式工作 . 它应该以这种方式重写:
作为Aaron Longwell答案的扩展,您还可以使用“哈希表示法”来访问具有被覆盖的访问器和更改器的属性:
有关该主题的一些很好的信息,请致电http://errtheblog.com/posts/18-accessor-missing .
它的长短是ActiveRecord正确处理ActiveRecord属性访问器的超级调用 .
我有一个rails插件,可以让属性覆盖与super一起工作,就像你期望的那样 . 你可以在github找到它 .
安装:
使用:
一旦你完成了这些事情就行了: