Ich habe ein Modell "Item", und ich möchte eine Reihe von Items mit Daten aus einer CSV-Datei generieren. Aber ich möchte dem Benutzer erlauben, auszuwählen, welche Datenspalten verwendet werden.Wie kann ich dynamisch Parameter für eine create-Methode generieren?
So hat mein Modell "Benutzer" ein Json-Attribut namens Spalten, die angibt, welche Spalten aus der CSV-Datei dieses Benutzers verwendet werden sollten. Zum Beispiel, wenn user.columns == {"title"=>"true","category"=>"false"}
, dann sollte die Titel Spalte verwendet werden, aber die Kategorie Spalte sollte nicht. (Alternativ könnte ich nur die Spalten Liste I enthalten sein sollen, wie folgt aus:. {"title"=>"included"}
, und später so etwas wie user.columns.each {|c| c[0]}
tun ein Array aller eingeschlossenen Spalten zu bekommen)
Ich habe eine Methode für Objekte zu erzeugen basierend auf den CSV-Daten:
def create
#...
SmarterCSV.process(file).each do |row| #this line returns an array of all the rows in the CSV file
Item.create(title: row[:title], category: row[:category])
end
end
aber wie kann ich die Methode der Parameter basierend auf den Inhalt von user.columns
ändern? Für das Beispiel wäre das Verfahren einfach Item.create(name: row[:title])
. Ist es möglich, eine solche Methode dynamisch zu generieren?
Ich plane, eine ganze Reihe von möglichen Spalten zu haben, so dass eine if
Bedingung für jede Möglichkeit nicht machbar ist.
Es ist mir nicht klar, die Zuordnung zwischen den Spaltennamen und was Sie in den 'create' Parameter benötigen. Aber es scheint, als ob Sie 'user.columns' modifizieren sollten, um etwas anderes zurückzugeben (oder eine andere Benutzermethode dafür zur Verfügung stellen) –
@MarkThomas Sorry, wenn ich unklar war, möchte ich Parameter für meine' create' Aktion basierend auf dem Inhalt generieren von 'user.columns'. Wenn zum Beispiel 'user.columns = {" included_column "=>" true "," eine andere_included_column "=>" true "," not_included_column "=>" false "}', dann würden die 'create' Parameter' Item sein. create (included_column: row [: included_column], andere_included_column: row [: another_included_column]) '. Ist das sinnvoll? 'not_included_column' wäre kein Parameter, weil es in' user.columns' false ist. –
Was enthält 'row'? –