Ruby on rails 我不应该把什么包括在“包括的事情”中。。。结束`街区?
我正在使用RubyonRails 3.2.2。我正在实现一个模块,并通过使用RoR特性将其包含在我的类中。它使所包含的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
可用。。。结束
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”,我试图解决您所问的问题。