0

我有以下文件层次结构:

库 > MyModule.rb 库 > MyModule.rb > MyClass.rb

在 MyModule.rb 中,我有一个初始化方法:

def initialize(variable, parameter)
  @variable = variable
  @parameter = parameter
end

但是,当我尝试创建我的类的实例时,结果是一个错误:

undefined method: set is not defined for nil

我试图用这个重建的初始化版本来修复它:

def initialize(variable, parameter)
  @variable = variable
  @parameter = parameter
end

这减轻了我收到的错误。但是,现在我要在 HTML.erb 文件中创建我的类的实例:

<%= MyModule::MyClass.new("string", 1) %>

在这里我得到一个参数错误:2 for 0

谁能解释一下?

根据要求提供更多信息:

我正在尝试创建一些方法来创建 html 标记作为常用元素的便捷包装器。特别是,它们利用 rails 的 content_tag 辅助方法来创建新方法。该计划最终是通过使用简单的 << 运算符来添加嵌套标记支持。

库/标签.rb

module Tags
  include ActionView::Helpers::TagHelper
  include ActionView::Helpers::JavaScriptHelper
  include ActionView::Context

  def initialize(type, content, options, &block)
    @type = type
    @content = content
    @options = block_given? ? nil : options
    @block = block_given? ? block : nil
  end

  def show
    if @block.nil?
      content_tag(@type, @content, @options)
    else
      content_tag(@type, @content, @options) { @block.call }
    end
  end
end

现在这是模块的最低级别;这些对于我将要实现的所有标签都是通用的。然后我在标签文件夹(Lib/tags/div.rb)中有一个类:

module Tags
  class DivTag
    def initialize(content, options, &block)
      super(:div, content, options, &block)
    end
  end
end

然后在我的测试文件 main.rb (这是去本地主机时路由到的)

这就是我得到错误的地方。

4

1 回答 1

0

“def Tags” - 这是错误的方法,你应该使用类标签......

在方法中调用“super” - 类应该从其他类继承,例如 class DivTag < Tags::Base def initialize super() # <- Tags::Base#initialize end end

默认情况下,每个新类都继承自“Object”类,并且 Object#initialize 接受 0 个参数。

为什么你不使用“content_tag”助手(http://apidock.com/rails/ActionView/Helpers/TagHelper/content_tag)?它几乎是你想要的

于 2012-04-09T03:21:46.783 回答