首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ActiveSupport::Concern实现DCI

使用ActiveSupport::Concern实现DCI
EN

Stack Overflow用户
提问于 2013-01-14 14:29:06
回答 1查看 534关注 0票数 1

我是Rails和Ruby的新手。我有一个User模型,其中one-to-manyTopic模型相关联。

我的混合看起来像这样:

代码语言:javascript
运行
复制
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

当我运行下面的代码时,我得到一个错误:

代码语言:javascript
运行
复制
u = User.first
u.extend Speaker
u.assigned_topics
NoMethodError: undefined method `assigned_topics' for #<User:0x00000002f5dca8>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-14 16:05:15

不要在Rails中使用DCI模式。至少如果你希望获得一些流量的话。目前扩展现有对象的速度非常慢。它使每个ruby实现的缓存机制崩溃。

我知道在过去的几周里,关于这个高估的东西有一些模糊的东西,但真的:不要这样使用它。这只是一个很大的麻烦和许多戏剧性的事情。Rails不是一个Java框架,因此它不存在与Java相同的问题。

如果您想要将内容从模型移动到模块,请使用简单的关注点,并将其硬编码到模型中。在运行时没有live-extend和所有的循环。下面是@dhh中关于如何使用它的要点:https://gist.github.com/1014971

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14314173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档