2016-11-11 4 views
-1

Ich habe N Anzahl der Tabellen und N Anzahl der Funktionen. Alle Funktionen haben denselben Code nur Tabellennameänderungen. Kann ich eine gemeinsame Funktion für alle diese Funktionen erstellen?Pass Tabellenname als Parameter zu Ruby-Methode

So etwas

def funcN 
    common_func(tableN) 
end 

private 

def common_func(tablename) 
    "Some Code" 
end 

Ich weiß, es kann mehrere Wege geben .. Was sind die Möglichkeiten, es zu tun?

Antwort

1

Sie sind sehr nah dran. Übergeben Sie einfach einen Tabellennamen als Argument an funcN:

def funcN(tableN) 
    common_func(tableN) 
end 

private 

def common_func(tablename) 
    "Some Code" 
end 

Was sind alle Möglichkeiten, es zu tun?

Theoretisch gibt es eine unbestimmte Anzahl von Möglichkeiten, ein Problem zu lösen, so dass Sie nie eine Antwort auf diese Frage bekommen werden.

P.S. Ihre Benennung folgt nicht den Konventionen. Hier ist, wie es aussehen würde, wenn es so wäre:

def func_n(table_name) 
    common_func(table_name) 
end 

private 

def common_func(table_name) 
    # code omitted 
end 
2

Wenn der Modellname in funcN statisch ist dann passieren sie ebenso wie die string zum Beispiel betrachtet post dann funcN("Post") oder von einem Schiene Rekord funcN(@record.class.to_s)

in privaten Methode fangen die Zeichenfolge param wie Sie tablename und Sie können es in Modell umwandeln, indem myModel = tablename.constantize

dann können Sie mit Ihrem Codezeile weitermachen an diesem Modell myModel

+0

Was ist mit einem statischen Modellnamen gemeint? Ich habe den Fehler einmal, aber ich bekomme es jetzt nicht. Kannst du es erklären, damit ich verstehen kann, was ich damals falsch gemacht habe? – vidal

+0

Ich meine, wenn Sie wissen, dass der Modellname, den Sie übergeben möchten, statisch sein wird, wenn Sie ihn von einem aktiven Datensatz holen und dynamisch übergeben werden. zum Beispiel, wenn der Modellname ein Post ist, der sicher ist, dann können Sie ihn statisch wie funcName übergeben ("Post") –

0

Wenn die Funktion, in Ruby normalerweise eine Methode genannt, innerhalb eines Modells liegt, kann sie auf den Tabellenname verweisen. Sie können den gemeinsamen Code mit einem Modul teilen und ihn in jedes Modell einbinden, das es benötigt, wie zum Beispiel: