2016-11-30 2 views
0

Ich versuche, eine Methode in einem Modell zu definieren, die Dinge zu vereinfachen ich, wie unten in meinem Controller tun:Passing Arbeit einen Attributnamen als Argument in einem Verfahren nicht in Rails

Modelle/Spiel. rb

def build_array_for(words) 
    words.downcase.split(",") 
end 

ich die Methode in der Steuerung wie unten

games_controller.rb Aufruf

Beachten Sie, dass ‚red_words‘ ist ein Attribut von Instanzen von Spiel, die Wert soll eine Zeichenfolge

sein, wenn ich die Methode aufrufen, erhalte ich:

undefined lokale Variable oder Methode `red_words 'für GamesController

Wenn ich bauen die Methode als:

def build_array 
    red_words.downcase.split(",") 
end 

es funktioniert, aber da ich es mit anderen Attributen für den gleichen Zweck verwende, würde es keinen Sinn machen.

Was fehlt mir hier, könnte es sein, dass das Argument als String übergeben wird und aus irgendeinem Grund der Name des Attributs nicht erkannt wird?

Antwort

1

Wenn Sie existierte Spalte bauen Array benötigen, dann können Sie dies versuchen:

def build_array_for(column) 
    self[column].downcase.split(",") 
end 

Wenn Sie will Array für jede Instanzvariable erstellen, wenn:

def build_array_for(name) 
    self.send(name).downcase.split(",") 
end 

Verwenden Symbol oder Zeichenfolge für einen Parameter:

@wordsArray = @game.build_array_for(:red_words) 
+0

Kein Glück, Alex, beide Alternativen stammen aus dem gleichen Fehler – Andrew

+0

Rufen Sie es so '@wordsArray = @ game.build_array_for (: red_words)' –

+0

Das ist großartig Alex es funktioniert jetzt gut. Vielen dank für Deine Hilfe! – Andrew

0

Ändern der Methode

def build_array_for(words) 
    words.downcase.split(",") 
end 

Wenn Sie self Schienen verwenden werden versuchen, ein Attribut words oder Instanzmethode zu finden words für Game Objekt

EDIT

Machen Sie diese entsprechend ändert

games_controller.rb

@wordsArray = @game.build_array_for(red_words) 

models/game.rb

def build_array(red_words) 
    red_words.downcase.split(",") 
end 
+0

Das Ergebnis ist das gleiche. Ich denke, in Ruby ist es dasselbe, wenn man 'selbst' benutzt oder nicht? In beiden Fällen wird versucht, eine Instanzmethode zu finden, die den Wert des Parameters 'words' für das Game-Objekt annimmt. In beiden Fällen bekomme ich "undefined lokale Variable oder Methode' red_words '" – Andrew

+0

Wenn es nicht ein' Attribut' oder eine 'Assoziation' ist, übergeben Sie es als Parameter –

+0

Stellen Sie sicher, dass Sie die Parameter mit Methodenaufruf übergeben und die Parameter akzeptieren in der Methode –

Verwandte Themen