Tengo una función en el helper para generar los campos… y para tratar
los parámetros que son opcionales, me monto una condición:
campo = opciones[:long_max] ? form.text_field( nombre, :maxlength =>
opciones[:long_max] ) : form.text_field nombre
El problema es que:
A.- Es feo y repetitivo
B.- No escala bien cuando son varios los parámetros opcionales:
if opciones[:class]
campo = opciones[:long_max] ? form.text_field(nombre, :class =>
opciones[:class], :maxlength => opciones[:long_max]) :
form.text_field(nombre, :class => opciones[:class])
else
campo = opciones[:long_max] ? form.text_field( nombre, :maxlength =>
opciones[:long_max] ) : form.text_field nombre
end
Yo lo que quiero es algo asà como esto:
campo = form.text_field(nombre, :class => opciones[:class] if
opciones[:class], :maxlength => opciones[:long_max] if
opciones[:long_max])
pero eso no funciona… ¿alguien sabe una forma de pasar parámetros
condicionalmente?
Yo lo que quiero es algo asà como esto:
campo = form.text_field(nombre, :class => opciones[:class] if
opciones[:class], :maxlength => opciones[:long_max] if
opciones[:long_max])
pero eso no funciona… ¿alguien sabe una forma de pasar parámetros
condicionalmente?
Mmm, ¿hay alguna razón para que las claves de opciones no se llamen
igual
que las que espera text_field (i.e long_max != maxlength) ? Si se
llamasen
igual, sólo tendrÃas que hacer un merge de opciones con el options de
text_field, o pasárselo directamente.
Yo lo que quiero es algo asà como esto:
campo = form.text_field(nombre, :class => opciones[:class] if
opciones[:class], :maxlength => opciones[:long_max] if
opciones[:long_max])
pero eso no funciona… ¿alguien sabe una forma de pasar parámetros
condicionalmente?
Mmm, ¿hay alguna razón para que las claves de opciones no se llamen
igual
que las que espera text_field (i.e long_max != maxlength) ? Si se
llamasen
igual, sólo tendrÃas que hacer un merge de opciones con el options de
text_field, o pasárselo directamente.
No hay ningún problema en que se llamara maxlength en vez de long_max,
pero en opciones estoy recogiendo algunas que son de uso interno (tipo,
prefijo, sufijo) y no le puedo pasar directamente; supongo que la
solución serÃa cambiar la declaración
def campo(form, nombre, opciones={})
por
def campo(form, nombre, opciones1={}, opciones2={})
pero esto supondrÃa rehacer todas las llamadas… joer!!
No hay ningún problema en que se llamara maxlength en vez de long_max,
pero en opciones estoy recogiendo algunas que son de uso interno (tipo,
prefijo, sufijo) y no le puedo pasar directamente; supongo que la
solución serÃa cambiar la declaración
def campo(form, nombre, opciones={})
por
def campo(form, nombre, opciones1={}, opciones2={})
¿No te valdrÃa esto?
def campo(form, nombre, opciones={})
html_options = {}
%w(maxlength class).each do |attrb|
if opciones.has_key?(attrb.to_sym)
html_options[attrb] = opciones.delete(attrb)
end
end
continuamos con los atributos html en html_options y los privados en
No hay ningún problema en que se llamara maxlength en vez de long_max,
pero en opciones estoy recogiendo algunas que son de uso interno (tipo,
prefijo, sufijo) y no le puedo pasar directamente; supongo que la
solución serÃa cambiar la declaración
def campo(form, nombre, opciones={})
por
def campo(form, nombre, opciones1={}, opciones2={})
¿No te valdrÃa esto?
def campo(form, nombre, opciones={})
html_options = {}
%w(maxlength class).each do |attrb|
if opciones.has_key?(attrb.to_sym)
html_options[attrb] = opciones.delete(attrb)
end
end
continuamos con los atributos html en html_options y los privados en
opciones
end
Probablemente se pueda hacer más fácil y más bonito
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.