在 Ruby/Rails 模型/控制器中引用关联/属性时 *、self.* 和 @* 之间的差异

2024-05-05

假设 Rails 模型具有持久/非持久属性,那么引用它们的最佳实践是什么?如果您查看公开可用的代码,就会发现使用了不同的模式。

例如,如果您有从一个模型到另一个模型的关联。使用有什么区别self.association_name and @协会名称?。最好的方法是什么?

与定义的非持久属性相同attr_accessor :attr在模型中。您可以使用这两种方法来参考它们,自我属性 and @attr。最好的方法是什么?


self.x/self.x=y 总是方法调用。

(self.x只是糖self.__send__(:x) and self.x = y真的只是糖self.__send__(:x=, y))

@x, 另一方面,仅指 an 实例变量 http://www.rubyist.net/~slagell/ruby/instancevars.html.

Using @x 不管用与 AR 关联,因为 AR 仅定义x/x= (哪些是方法)因其神奇的操作。 (AR 本质上只是通过这些方法和路线“捕获”意图访问它自己的内部数据结构是无关任何名称相似的实例变量。)

attr_accessor http://www.rubyist.net/~slagell/ruby/accessors.html允许“双向访问”因为且仅因为它使用与其支持的同名实例变量(它必须将值存储在某处)。考虑一下attr_accessor :x相当于:

def x; @x; end
def x= (y); @x = y; end

快乐编码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Ruby/Rails 模型/控制器中引用关联/属性时 *、self.* 和 @* 之间的差异 的相关文章

随机推荐