我是Rails和Ruby的新手。我有一个User模型,其中one-to-many与Topic模型相关联。
我的混合看起来像这样:
module Speaker
extend ActiveSupport::Concern
included do
has_many :assigned_topics, class_name: 'Topic', foreign_key: 'speaker_id'
end
def add_topic(topic)
topic.speaker = self
topic.save
end
def remove_topic(topic)
topic.speaker = nil
topic.save
end
end当我运行下面的代码时,我得到一个错误:
u = User.first
u.extend Speaker
u.assigned_topics
NoMethodError: undefined method `assigned_topics' for #<User:0x00000002f5dca8>发布于 2013-01-14 16:05:15
不要在Rails中使用DCI模式。至少如果你希望获得一些流量的话。目前扩展现有对象的速度非常慢。它使每个ruby实现的缓存机制崩溃。
我知道在过去的几周里,关于这个高估的东西有一些模糊的东西,但真的:不要这样使用它。这只是一个很大的麻烦和许多戏剧性的事情。Rails不是一个Java框架,因此它不存在与Java相同的问题。
如果您想要将内容从模型移动到模块,请使用简单的关注点,并将其硬编码到模型中。在运行时没有live-extend和所有的循环。下面是@dhh中关于如何使用它的要点:https://gist.github.com/1014971
https://stackoverflow.com/questions/14314173
复制相似问题