/ / Rails 4: opciones de visualización como botones de opción: ruby-on-rails, ruby-on-rails-4, forma simple, forma simple para

Rieles 4: muestra las opciones como botones de radio: rubí sobre rieles, rubí sobre rieles 4, forma simple, forma simple para

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 № 1

Simple 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.