I die folgende Dateihierarchie haben:Rails: Initialize-Methode in-Modul aus Bibliothek geladen Zusammenstoß
Lib> MyModule.rb Lib> MyModule.rb> MyClass.rb
In MyModule.rb, ich habe eine Methode initialize:
def initialize(variable, parameter)
@variable = variable
@parameter = parameter
end
Allerdings, wenn ich eine Instanz meiner Klasse versuchen und schaffen, ist das Ergebnis ein Fehler:
undefined method: set is not defined for nil
Ich versuchte es mit dieser rekonstruierten Version von initialize zu beheben:
def initialize(variable, parameter)
@variable = variable
@parameter = parameter
end
der Fehler dadurch lindert, die ich erhalten. Aber jetzt gehe ich eine Instanz meiner Klasse in einer HTML.erb-Datei zu erstellen:
<%= MyModule::MyClass.new("string", 1) %>
Hier habe ich ein Argument Fehler: 2 für 0
Kann das jemand erklären?
Weitere Informationen angefordert:
Ich versuche, ein paar Methoden zu erstellen, die für häufig verwendete Elemente HTML-Tags als Convenience-Wrapper erstellen. Diese verwenden insbesondere die Helpermethode content_tag von rails, um neue Methoden zu erstellen. Der Plan sieht schließlich vor, die Unterstützung für verschachtelte Tags hinzuzufügen, indem der einfache Operator < < verwendet wird.
Lib/tags.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
Nun ist dies das niedrigste Niveau des Moduls; Diese werden allen Tags gemeinsam sein, die ich implementieren werde. Ich habe dann eine Klasse in den Tags-Ordnern (Lib/tags/div.rb):
module Tags
class DivTag
def initialize(content, options, &block)
super(:div, content, options, &block)
end
end
end
Dann in meiner Testdatei main.rb (das, was ist, geleitet, wenn auf localhost gehen)
Und hier bekomme ich meinen Fehler.
Dies ist ein wenig unklar. Können Sie beschreiben, was die definierten Klassen/Module sind, wie sie miteinander verwandt sind und welche Methoden wo definiert sind? – tsherif
Ich habe weitere Informationen hinzugefügt –