【发布时间】:2020-03-26 11:31:43
【问题描述】:
我对 RoR 还很陌生。我花了一个下午阅读模块(用作关注点)。我还没有找到一篇描述使用include 或extend 方法查找的文件路径的好文章(如果include 和extend 是方法?)。
我发现的最具体的例子在这里:Ruby On Rails - Using concerns in controllers。这让我觉得如果我想在我的Foo 模型中包含'Bar' 模块,我会在我的models/ 目录中创建一个concerns/ 目录,并在此文件夹中创建一个'Bar' 模块文件。
# in models/concerns/bar.rb
modlue Bar
# do I need this???
extend ActiveSupport::Concern
def speak_bar
puts "model module bar!"
end
end
# in models/foo.rb
class Foo < ApplicationRecord
include Bar
end
# I could then perform:
Foo.new.speak_bar
=> "model module bar!"
如果我想在我的 Foo 控制器中包含一个 Bar 模块,我会这样做:
# in controllers/concerns/bar.rb
modlue Bar
# Again, do I need this???
extend ActiveSupport::Concern
def speak_bar
return "controller module bar!"
end
end
# in controllers/foo.rb
class FoosController < ApplicationController
include Bar
def make_bar
@bar = speak_bar
end
end
# I could then use @bar in my views (anywhere else?) as <%= @bar %> and get it to output
=> "controller module bar!"
问题总结:
就文件路径而言,上述理解是否正确?
我是否需要使用extend ActiveSupport::Concern 行才能使用此路径系统?
include 和 extend 是方法吗?
感谢您的帮助。
【问题讨论】:
标签: ruby-on-rails ruby module model controller