2016-10-30 7 views
-1

Zeit, um die Experten zu fragen. Ich versuche meine Datenbank zu erstellen. Der folgende Code gibt mir eine falsche Anzahl von Argumenten Fehler, um das "Kategorie" -Objekt zu erstellen. Dies ist das erste Mal, dass dieser Fehler während der Objekterstellung in dieser Datei auftritt.Falsche Anzahl der Argumente Fehler beim Initialisieren mit Optionen Hash

@category1 = Category.new({'description' => 'food'}) 
@category1.save 

Dies ist, was meine Kategorie Modell wie ..

class Category 

attr_reader :id, :description, 

def initialize(options) 
@id = options['id'].to_i 
@description = options['description'] 
end 

`` `

Apperently erwartet es null Argumente sieht. Aber ich initialisiere es mit dem Optionen-Hash. ID kommt später aus SQL.

Irgendwelche Ideen?

+0

versuchen 'def initialisieren (** Optionen)' –

+0

@OlegSobchuk: nah, das ist nicht das Problem. –

+0

@SergioTulentsev ist richtig, das hilft nicht. – godhar

Antwort

1

fand ich Problem

Komma am Ende der attr_reader Liste entfernen:

attr_reader :id, :description, 

zu

attr_reader :id, :description 

PS

Typo

nur
+0

Brilliant @Oleg ... danke – godhar

+0

godhar, ich schlage vor, Sie warten eine Weile, bevor Sie eine Antwort auswählen. Sie wollen keine anderen Antworten entmutigen oder diejenigen, die noch an Antworten arbeiten, kurzschließen. Es gibt keine Eile. Oleg, der darum bittet, dass Ihre Antwort vom OP hochgezählt und ausgewählt wird, vor allem so schnell, nachdem die Frage gestellt wurde, ist ungehörig. –

0

Das Problem ist das abschließende Komma am Ende der Attribut-Leser-Definitionen mit attr_reader.

Wenn Sie es sich aus dieser Änderung:

attr_reader :id, :description, 

dazu:

attr_reader :id, :description 

sollte es funktionieren (zumindest tat es in meinen Tests).

AFAICT der Grund ist, dass mit dem Komma die ganze Definition ein Argument für die attr_reader-Methode wird. Nicht sicher, was es mit diesem Argument (das kann wahrscheinlich nur einen Experten Rubyist sagen), aber im Ergebnis hat Ihre Klasse keine Initialisierer-Methode akzeptiert alle Argumente.

Verwandte Themen