на немного другой гвоздь.
Идея использования метода класса для этого кажется неправильной с точки зрения ОО.
Вы должны действительно изменить его, чтобы он работал из метода экземпляра.
def personal_data_module
item_module = Hpricot(body)
{
:studies => (item_module/"studies").inner_html,
:birth_place => (item_module/"birth_place").inner_html,
:marrital_status => (item_module/"marrital_status").inner_html
}
end
Тогда, где вам нужно использовать его вместо того, чтобы делать ....
Foobar.get_personal_data_module(the_id)
вы бы сделали
Foobar.find_by_person_id(the_id).personal_data_module
Это выглядит хуже, но на самом деле, это немного искусственно, обычно вы бы
ссылаясь на это из какого-то другого объекта, где на самом деле у вас есть «дескриптор» объекта person, поэтому вам не придется создавать его самостоятельно.
Например, если у вас есть другой класс, где вы ссылаетесь на person_id в качестве внешнего ключа, у вас будет
Организация класса
принадлежат: человек
конец
тогда, когда у вас есть организация, вы можете пойти
organisation.person.personal_information_module
Да, я знаю, что это нарушает деметру, так что было бы лучше обернуть его в делегат
class Organisation
belongs_to :person
def personal_info_module
person.personal_info_module
end
end
А потом из кода контроллера вы можете просто сказать
organisation.personal_info_module
, не беспокоясь о том, откуда оно вообще.
Это потому, что 'personal_data_module' действительно является атрибутом этого класса, а не чем-то доступным через метод класса.
Но это также поднимает некоторые вопросы, например, является ли person_id первичным ключом этой таблицы? Это унаследованная ситуация, когда первичный ключ таблицы не называется id?
Если это так, говорили ли вы ActiveRecord об этом или вам нужно использовать 'find_by_person_id' везде, где вы действительно хотите написать 'find'?