gpt4 book ai didi

ruby-on-rails - 使用 ActiveSupport::Concern 实现 DCI

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:37 40 4
gpt4 key购买 nike

我是 Rails 和 Ruby 的新手。我正在尝试在 Rails 3.2.11 应用程序中实现 Data-Context-Interaction/aka DCI/范例。我有 User 模型,该模型 one-to-manyTopic 模型关联。我正在尝试为 User 编写一个 mixin,但它们无法正常工作,请提供一些调试帮助。

我的混音看起来像:

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>

最佳答案

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

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

如果您想将内容从模型移动到模块,请使用一个简单的关注点,并将其硬编码到模型中。在运行时没有实时扩展和所有的箍。这是来自@dhh 的要点如何使用它:https://gist.github.com/1014971

关于ruby-on-rails - 使用 ActiveSupport::Concern 实现 DCI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14314173/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com