gpt4 book ai didi

ruby-on-rails - 如何在 Rails 4 中使用关注点

转载 作者:行者123 更新时间:2023-12-03 03:53:43 26 4
gpt4 key购买 nike

默认的 Rails 4 项目生成器现在会在 Controller 和模型下创建目录“concerns”。我找到了一些有关如何使用路由关注点的解释,但没有找到有关 Controller 或模型的解释。

我很确定这与社区当前的“DCI 趋势”有关,并且想尝试一下。

问题是,我应该如何使用这个功能,是否有关于如何定义命名/类层次结构以使其工作的约定?如何在模型或 Controller 中包含问题?

最佳答案

所以我自己发现了。这实际上是一个非常简单但功能强大的概念。它与代码重用有关,如下例所示。基本上,这个想法是提取常见和/或上下文特定的代码块,以清理模型并避免它们变得太胖和困惑。

作为示例,我将放置一个众所周知的模式,即可标记模式:

# app/models/product.rb
class Product
include Taggable

...
end

# app/models/concerns/taggable.rb
# notice that the file name has to match the module name
# (applying Rails conventions for autoloading)
module Taggable
extend ActiveSupport::Concern

included do
has_many :taggings, as: :taggable
has_many :tags, through: :taggings

class_attribute :tag_limit
end

def tags_string
tags.map(&:name).join(', ')
end

def tags_string=(tag_string)
tag_names = tag_string.to_s.split(', ')

tag_names.each do |tag_name|
tags.build(name: tag_name)
end
end

# methods defined here are going to extend the class, not the instance of it
module ClassMethods

def tag_limit(value)
self.tag_limit_value = value
end

end

end

因此,按照产品示例,您可以将 Taggable 添加到您想要的任何类并共享其功能。

DHH 很好地解释了这一点:

In Rails 4, we’re going to invite programmers to use concerns with the default app/models/concerns and app/controllers/concerns directories that are automatically part of the load path. Together with the ActiveSupport::Concern wrapper, it’s just enough support to make this light-weight factoring mechanism shine.

关于ruby-on-rails - 如何在 Rails 4 中使用关注点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14541823/

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