Я работаю с некоторыми моделями, в которых многие ключевые атрибуты данной модели фактически хранятся в подмодели.
Пример:
class WikiArticle
has_many :revisions
has_one :current_revision, :class_name => "Revision", :order => "created_at DESC"
end
class Revision
has_one :wiki_article
end
Класс Revision имеет массу полей базы данных, а WikiArticle имеет очень мало. Тем не менее, мне часто приходится обращаться к полям Revision из контекста вики-статьи. Наиболее важный случай этого, вероятно, при создании статьи. Я делал это с множеством методов, которые выглядят так, по одному для каждого поля:
def description
if @description
@description
elsif current_revision
current_revision.description
else
""
end
end
def description=(string)
@description = string
end
А затем при сохранении я сохраняю @description в новой ревизии.
Все это очень напоминает мне attr_accessor, только не похоже, что я могу заставить attr_accessor делать то, что мне нужно. Как я могу определить attr_submodel_accessor таким образом, чтобы я мог просто дать имена полей и заставить его автоматически создавать все эти методы, как attr_accessor?