如何区分rails 4中的方法和属性

时间:2015-06-09 09:10:37

标签: ruby-on-rails ruby-on-rails-4

我有一个cartridgedosing_edge模型,因此它们分别具有关系has_many和belongs_to。通过这样做我可以打电话:

@cartridge.dosing_edges

检索属于墨盒的所有dosing_edges。这有效, 但墨盒型号还有一个dosing_edges属性。如何区分方法和属性。

我的意思是,如果我想访问@cartridge.dosing_edges而不是调用方法.dosing_edges来检索所有dosing_edges。

或者我应该将dosing_edges属性重命名为不同。

3 个答案:

答案 0 :(得分:7)

为您的has_many关联提供不同的名称。

has_many :all_dosing_edges, class_name: "DosingEdge"

我认为这对你有用。

答案 1 :(得分:1)

据我所知,如果你有dosing_edges属性和dosing_edges方法,当你调用object.dosing_edges时,你会得到任何方法返回,导致有一个同名的方法作为属性,您基本上会覆盖属性,因为类的属性也是可以覆盖的方法。您可以将has_many关系重命名为不同的关系。

答案 2 :(得分:1)

@MKumar你应该重命名你的关联是对的。但是,作为一些解释,您可以使用[:attname]哈希样式表示法访问从数据库加载的属性(请参阅答案底部)

所以,当你说@cartridge.dosing_edges你正在调用方法时:默认情况下,这个方法会被rails定义为读取属性,你可能已经覆盖了它使用has_many 添加的方法,这将添加各种方法,包括dosing_edges(假设您尚未更改名称)。

默认的dosing_edges方法如下所示:

def dosing_edges
  self[:dosing_edges]
end

self[:dosing_edges]获取属性实例变量,而不是调用方法。