加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在Ruby中使用多级模块结构调用类方法

发布时间:2020-12-17 02:38:59 所属栏目:百科 来源:网络整理
导读:我有一些模块要包含在我的控制器类中.这些模块定义了before_filter: module BasicFeatures def filter_method ... end def self.included(base) base.before_filter(:filter_method) ... endendmodule AdvancedFeatures include BasicFeatures ...end 和班
我有一些模块要包含在我的控制器类中.这些模块定义了before_filter:

module BasicFeatures
  def filter_method
    ...
  end
  def self.included(base)
    base.before_filter(:filter_method)
    ...
  end
end

module AdvancedFeatures
  include BasicFeatures
  ...
end

和班级:

class BasicController < ApplicationController
    include BasicFeatures
end

class AdvancedController < ApplicationController
    include AdvancedFeatures
end

>当AdvancedFeatures模块包含在AdvancedFeatures模块中时,其中没有before_filter方法.
> AdvancedController没有得到before_filter调用.

我需要两个控制器来获取before_filter而不需要任何代码重复.我不知道我是否使用最好的方法,所以我愿意接受任何建议.

解决方法

这就是创建ActiveSupport :: Concern的原因.

module BasicFeatures
  extend ActiveSupport::Concern

  included do
    before_filter :require_user
  end

  def this_is_an_instance_method
    'foo'
  end

  module ClassMethods
    def this_is_a_class_method
      'bar'
    end
  end
end

class SomeClass
  include BasicFeatures
end

SomeClass.new.this_is_an_instance_method #=> 'foo'

您也可以嵌套它们 – 也就是说,创建包含关注点的关注点 – 并且一切都将按预期工作.和here are the docs.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读