Wie kann ich einen Hash-Code zu einem Array *args
in Rails hinzufügen? Ich möchte nicht auf den ursprünglichen Wert stampfen, wenn einer existiert.Wie füge ich einen Hash zu * args hinzu?
Zum Beispiel habe ich eine Methode, die ein Array empfängt:
def foo(*args)
# I want to insert {style: 'bar'} into args but only if !style.present?
bar(*args) # do some other stuff
end
Ich habe angefangen von Schienen die extract_options und reverse_merge Methoden:
def foo(*args)
options = args.extract_options! # remove the option hashes
options.reverse_merge! {style: 'bar'} # modify them
args << options # put them back into the array
bar(*args) # do some other stuff
end
Es funktioniert aber scheint ausführlich und nicht sehr rubinisch. Ich habe das Gefühl, etwas verpasst zu haben.
Gibt es einen Grund, warum Sie es wieder in die Liste der Argumente einfügen müssen? Ich glaube, dass die ersten beiden in der Rails-Quelle üblich sind. –
Gute Frage. Ja, die Funktion 'foo' übergibt die Argumente an eine andere Funktion. Ich werde die Frage bearbeiten, um das zu zeigen. Ich schreibe eine FormBuilder-Klasse, viele Helfer rufen andere Helfer an. – IAmNaN