【发布时间】:2011-07-28 22:30:54
【问题描述】:
我有一个名为Story 的类与名为User 的类相关联。
我还有一个名为 Parser 的类,它扩展了 Story 的解析能力(例如查找名词)。
class User < ActiveRecord::Base
has_many :stories
end
class Story < ActiveRecord::Base
belongs_to :user
attr_accessible :title, :content
end
class Parser < Story
def find_nouns
self.content.do_something
end
end
假设我想为数据库中的第一个用户创建一个新故事。通常,我会简单地使用
User.first.stories.new(:title => 'Foo', :content => 'Bar')
我怎样才能做到这一点,并且仍然优雅地将记录与第一个故事联系起来?
类似的东西:
User.first.stories.new(:title => 'Foo', :content => 'Bar').find_nouns
问题是,基类无法访问find_nouns 方法——它属于StoryParser。
【问题讨论】:
-
您可以将
Parser设为一个模块并将其包含在Story类中,而不是继承。或者将Parser添加为Story的成员并将find_nouns调用委托给它。 -
member of Story是什么意思? -
像这样:
class Storyattr_accessor :parserdef initialize@parser = Parser.new(content)enddelegate :find_nouns, :to => :parserend
标签: ruby-on-rails ruby ruby-on-rails-3 oop associations