- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
默认的 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/
我是一名优秀的程序员,十分优秀!