¿Cómo añado de manera condicional un hash a una matriz *args
en Rails? No quiero pisar el valor original si existe.¿Cómo agrego un hash a * args?
Por ejemplo, tengo un método que recibe una matriz:
def foo(*args)
# I want to insert {style: 'bar'} into args but only if !style.present?
bar(*args) # do some other stuff
end
He empezado a utilizar los métodos y extract_options reverse_merge proporcionados por los carriles:
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
funciona, pero parece detallado y no muy ruby-ish. Siento que me he perdido algo.
¿Hay alguna razón por la que deba volver a colocarla en la lista 'args'? Creo que los dos primeros son comunes en la fuente de Rails. –
Buena pregunta. Sí, la función 'foo' pasa los argumentos a otra función. Editaré la pregunta para mostrar eso. Estoy escribiendo una clase FormBuilder, muchos ayudantes llaman a otros ayudantes. – IAmNaN