假设具有持久性/非持久性属性的Rails模型,有关引用它们的最佳做法是什么?如果您查看公开的代码,则使用不同的模式.
例如,如果您有一个模型到另一个模型的关联.使用self.association_name和@association_name?有什么区别?最好的方法是什么?
与在模型中使用attr_accessor:attr定义的非持久属性相同.您可以使用两种方法(self.attr和@attr)来引用它们.最好的方法是什么?
解决方法
self.x / self.x = y总是方法调用.
(self.x只是自己的糖.__发送__(:x)和self.x = y真的只是为了自己的糖.__发送__(:x =,y))
另一方面,@x只指一个instance variable.
使用@x将不能与AR关联使用,因为AR仅定义x / x =(它们是方法)用于其神奇操作. (AR基本上只是通过这些方法“捕获”意图访问,并通过自己的与任何类似命名的实例变量无关的内部数据结构路由).
attr_accessor
允许“访问两种方式”,因为它只是因为它使用相同名称的实例变量作为它的后备(它必须存储值在某个地方).考虑attr_accessor:x等效于:
def x; @x; end def x= (y); @x = y; end
快乐编码.