2012-02-02 17 views
10

Mi pregunta es cómo configurar un campo en forma de carriles de solo lectura. El siguiente es un cuadro de selección en el controlador de citas. Los usuarios no pueden cambiar la selección.¿Cómo establecer un campo de solo lectura en las vistas de carriles 3.1.0?

<% @quote.test_items.each do |t| %> 
    <%= f.association :test_items, :label => false, :selected => t.id %> 
    <% end %> 

La aplicación utiliza simple_form. Muchas gracias.

+0

en los carriles 4+ no es de sólo lectura: cierto ahora. disabled: true también funciona –

Respuesta

2

No tengo claro si el método de asociación acepta o no las opciones HTML, pero si lo hace, puede pasar disabled: 'disable' para que sea de solo lectura con un valor fijo.

creo que podría ser capaz de elegir el valor fijo pasando asociación como bloque, como se muestra en la documentación de la asociación:

f.association :company do |c| 
    c.input :name, selected: 'selection' 
    c.input :type 
end 

En cuanto a si o no la lista completa puede ser y todavía de sólo lectura desplegable, las únicas soluciones que veo de google implican JS, por ejemplo:

http://techeyes.blogspot.com/2007/11/making-html-select-readonly.html

+0

El ejemplo en el enlace proporciona una solución. Pero no puedo encontrar el código js adjunto y, por lo tanto, no pude entender cómo funcionó. Gracias. – user938363

+0

¿Hay más solución ferroviaria? – user938363

7

creo que usted acaba de pasar en :disabled => true. Ha sido mi experiencia que las opciones 'solo funcionan' con simple_form. Así, en su caso:

<% @quote.test_items.each do |t| %> 
    <%= f.association :test_items, :label => false, :disabled => true, :selected => t.id %> 
<% end %> 

Desde el simple_form github repo:

También es posible dar la opción: personas con discapacidad a SimpleForm, y automáticamente va a marcar el envoltorio como discapacitados con una clase CSS, por lo que también puede pegar etiquetas, sugerencias y otros componentes dentro del envoltorio.

+1

The: disabled => true muestra la selección y la hace inmutable. Sin embargo, tampoco permite que el servidor recupere el valor de la selección. La aplicación debe pasar el valor de selección al servidor. Gracias por la idea – user938363

+0

¿Qué estás tratando de lograr? Claramente, un elemento de formulario no es lo que está buscando, ya que lo quiere deshabilitar de todos modos. ¿Estás tratando de establecer valores predeterminados para el formulario? –

+0

Lo que necesitamos primero es un campo de solo lectura. El valor del campo se transfiere de la base de datos y no es necesario que el usuario lo seleccione. La aplicación también permite al usuario eliminar un campo por completo. Es por eso que necesitamos que el valor sea enviado al servidor. : disabled => true logra el objetivo de readonly y falló en 2nd, que es enviar el valor al servidor. si el campo deshabilitado se puede configurar como falso antes de enviarlo al servidor, puede funcionar. – user938363

37

He encontrado un problema similar, afortunadamente, hay una resolución simple.

El problema básico es que si usa :disabled => true con simple_form, no volverá a ver ese valor en el controlador. Cuando pasa un objeto del formulario HTML para vincularlo más tarde al modelo, necesita todos esos atributos. Sin embargo, :disabled => true no pasa ningún atributo de este tipo.

La solución a esto es usar :readonly => true - protegerá el campo de la entrada del usuario y aún así le devolverá el valor del parámetro al controlador para que pueda vincular todo a su modelo.

Buena suerte.

Ver https://github.com/plataformatec/simple_form/pull/367

+2

Esta respuesta es la más relevante para la pregunta, OMI. Debe ser seleccionado como correcto. – navjotk

+0

También encontré que las asociaciones pueden no respetar la bandera de solo lectura y terminaron usando desactivado para mis necesidades – ScottJShea

1

Sí, lo dijo @ gk0r, ya que es documented here:

NOTA: Las opciones HTMLdisabled, readonly y multiple pueden ser tratados como booleanos. Por lo que especificar :disabled => true dará disabled="disabled".

* desactivado tendrá un comportamiento ligeramente diferente que de solo lectura.

Cuestiones relacionadas