2015-06-09 2 views
0

У меня есть модели cartridge и dosing_edge, так что они имеют отношения has_many и принадлежат соответственно. Поступая таким образом, я могу позвонить:Как отличить метод от атрибута в рельсах 4

@cartridge.dosing_edges 

для извлечения всех дозирующих предметов, которые относятся к картриджу. И это работает, , но модель картриджа также имеет атрибут dosing_edges. Как отличить метод и атрибут.

Я имею в виду, если я хочу получить доступ к @cartridge.dosing_edges, чтобы не вызвать метод .dosing_edges для извлечения всех дозирующих_решений.

Или я должен переименовать атрибут dosing_edges в другое.

ответ

7

дать свое имя ассоциации has_many.

has_many :all_dosing_edges, class_name: "DosingEdge" 

Я думаю, что это сработает для вас.

1

Насколько я знаю, если у вас есть dosing_edges атрибута и dosing_edges метода, когда вы звоните object.dosing_edges вы получите то, что метод возвращает, вызвать имеющий метод с таким же именем, как атрибут, в основном перезаписать атрибут, как атрибут класса тоже метод, который может быть перезаписан. Вы можете переименовать свои отношения has_many в нечто иное.

1

@MKumar прав, что вы должны переименовать свою ассоциацию. В какое-то объяснение, однако, вы можете получить доступ атрибуты, загруженные из базы данных, используя обозначения [:attname] хэш-стиля (см нижнюю часть ответа)

Итак, когда вы говорите @cartridge.dosing_edges вы звоните в метод: этот метод будет иметь для вас по умолчанию был определен rails для чтения атрибута, и вы могли бы перезаписать его с помощью методов, добавленных в макрос , который добавит множество методов, включая dosing_edges (при условии, что вы не изменили имя все же).

по умолчанию dosing_edges метод будет выглядеть следующим образом:

def dosing_edges 
    self[:dosing_edges] 
end 

self[:dosing_edges] получает переменную экземпляра атрибута, вместо вызова метода.

Смежные вопросы