Ruby on rails 我不应该把什么包括在“包括的事情”中。。。结束`街区?

Ruby on rails 我不应该把什么包括在“包括的事情”中。。。结束`街区?,ruby-on-rails,ruby,ruby-on-rails-3,module,activesupport,Ruby On Rails,Ruby,Ruby On Rails 3,Module,Activesupport,我正在使用RubyonRails 3.2.2。我正在实现一个模块,并通过使用RoR特性将其包含在我的类中。它使所包含的可用。。。结束block making代码,该代码在包含模块的类的类上下文中执行 我的疑问是:我应该在所包含的中做什么。。。结束block?也就是说,例如,做出以下行为是否是“常见”/“良好”实践 module MyModule extend ActiveSupport::Concern class MyModuleClass attr_accessor :at

我正在使用RubyonRails 3.2.2。我正在实现一个模块,并通过使用RoR特性将其包含在我的类中。它使所包含的
可用。。。结束
block making代码,该代码在包含模块的类的类上下文中执行

我的疑问是:我应该在所包含的
中做什么。。。结束
block?也就是说,例如,做出以下行为是否是“常见”/“良好”实践

module MyModule
  extend ActiveSupport::Concern

  class MyModuleClass
    attr_accessor :attr1, :attr2, :attr3

    def initialize(attrs)
     @attr1 = attrs[:attr1]
     @attr2 = attrs[:attr2]
     @attr3 = attrs[:attr3]
    end
  end

  included do
    @my_module_class = MyModuleClass.new(some_attrs)
  end
end

此外,
@my_module_class
变量将作为
MyModule
的include类中的属性提供(顺便说一句:我想使
@my_module_class
仅对
MyModule
内部可见,因为它仅用于该模块)?是否有一些“高级”示例或教程,介绍如何处理我试图在所包含的
中实例化的情况。。。结束
上述代码块?你有什么建议?

@my_类将是MyClass的实例,而不是MyModule。如果要使MyClass的所有实例都成为MyModule的实例,则应编写:

 include MyModule
在类定义内部

我认为我的答案是有意义的,如果你看一下这个问题在编辑之前的原始版本

编辑1:

让我们添加到您的示例中,并假设您有一个名为Foo的类:

class Foo
    include MyModule
end
您想创建一个与Foo关联的MyModuleClass实例,但听起来您并不是真的想修改Foo或授予它访问MyModuleClass的权限。我建议您使用哈希表:

module MyModule
    # ...

    @hash = {}
    class << self
        attr_accessor :hash
    end

    included do
        MyModule.hash[self] = MyModuleClass.new(some_attrs)
    end
end
模块MyModule
# ...
@哈希={}
课堂谢谢,但“主要”问题与“我不应该在
included do…end
block中包含什么内容?”相关,例如,与我的案例相关。剩下的是“更多”,即使这对我来说很重要。但是,我不想让
MyModuleClass
的所有实例都成为
MyModule
的一个实例,而是只在
MyModule
内部提供这些实例;此外,类定义中的
include MyModule
语句是隐式的/明显的,因为该模块旨在包含在类中。“我不应该做什么”的问题太模糊,我无法真正回答,但请参阅我上面的“Edit 1”,我试图解决您所问的问题。