Estoy trabajando en una aplicación Rails 4, usando simple_form para la entrada. Hay varios campos modelo que pueden tomar respuestas bien conocidas o una respuesta de forma libre. Por ejemplo, para un campo fruit:string
Me gustaría mostrar "Apple"
, "Banana"
, "Other"
. Si el usuario elige "Other"
, pueden ingresar cualquier texto de forma libre. Actualmente, todo lo que puedo hacer es usar <%= f.input :fruit %>
y aparece un cuadro de texto en blanco. ¿Es posible mostrar botones de radio en su lugar? puedo hacer
<%= f.collection_radio_buttons :fruit, [["Apple", "Apple"], ["Banana", "Banana"]], :first, :last %>
pero eso no proporciona la opción "Otro". El objetivo es registrar "Apple", "Banana" o el valor especificado (escrito) si se eligió "Otro".
Respuestas
1 para la respuesta № 1Simple Form nos permite as: :radio_buttons
en una colección, así
<%= f.input :fruit, collection: ["apple", "banana", "other"], as: :radio_buttons %>
Ver el sección de colección del archivo README SimpleForm para más información sobre entradas de colección.
0 para la respuesta № 2
Una solución sería tener la f.collection_radio_buttons seguido de f.input, ambos con el mismo nombre. Luego, habilite selectivamente la entrada f.basada en el botón de opción seleccionado con jquery o javascript. Para que esto funcione, es probable que también desee agregar una opción ["Otro"] ["Otro"].
EDITAR Tal vez algo en este sentido:
f.collection_radio_buttons :fruit, [["Apple","Apple"],["Orange","Orange"],["Other","Other"]], :first, :last
f.text_field :fruit
$("input:radio[name="foo[fruit]"]").change(function(){
if($(this).val() == "Other"){
$("input:text[name="foo[fruit]"]").show().prop( "disabled", false);
}else{
$("input:text[name="foo[fruit]"]").hide().prop( "disabled", true );
}});
Debido a que tienen el mismo nombre, Rails usará el último valor (el campo de texto en este caso si está habilitado); de lo contrario, usará el botón de opción seleccionado.