ruby-on-rails – 引用Ruby / Rails中的关联/属性时,*,self *和@ *之间的差异模型/控制器

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 引用Ruby / Rails中的关联/属性时,*,self *和@ *之间的差异模型/控制器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设具有持久性/非持久性属性的Rails模型,有关引用它们的最佳做法是什么?如果您查看公开的代码,则使用不同的模式.

例如,如果您有一个模型到另一个模型的关联.使用self.association_name和@association_name?有什么区别?最好的方法是什么?

与在模型中使用attr_accessor:attr定义的非持久属性相同.您可以使用两种方法(self.attr和@attr)来引用它们.最好的方法是什么?

@H_502_7@解决方法
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

快乐编码.

猜你在找的Ruby相关文章