我有一个cartridge
和dosing_edge
模型,因此它们分别具有关系has_many和belongs_to。通过这样做我可以打电话:
@cartridge.dosing_edges
检索属于墨盒的所有dosing_edges。这有效, 但墨盒型号还有一个dosing_edges属性。如何区分方法和属性。
我的意思是,如果我想访问@cartridge.dosing_edges
而不是调用方法.dosing_edges
来检索所有dosing_edges。
或者我应该将dosing_edges属性重命名为不同。
答案 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]
获取属性实例变量,而不是调用方法。