我正在使用一些模型,其中许多给定模型的关键属性实际上存储在子模型中。
例子:
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 则很少。但是,我经常需要从 WikiArticle 的上下文中访问修订的字段。最重要的案例可能是创建文章。我一直在用很多看起来像这样的方法来做到这一点,每个字段一个:
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 那样自动创建所有这些方法?