/ / Rails 4 - Visualizza le opzioni come pulsanti di opzione: ruby-on-rails, ruby-on-rails-4, simple-form, simple-form-for

Rails 4 - Visualizza le scelte come pulsanti radio - ruby-on-rail, ruby-on-rail-4, simple-form, simple-form-for

Sto lavorando su un'applicazione Rails 4, usando simple_form per l'input. Esistono diversi campi modello che possono accettare risposte note o una risposta in formato libero. Ad esempio, per un campo fruit:string Mi piacerebbe mostrare "Apple", "Banana", "Other". Se l'utente sceglie "Other", possono inserire qualsiasi testo in formato libero. Attualmente, tutto quello che posso fare è usare <%= f.input :fruit %> e viene visualizzata una casella di testo vuota. È possibile invece mostrare i pulsanti di opzione? posso fare

<%= f.collection_radio_buttons :fruit, [["Apple", "Apple"], ["Banana", "Banana"]], :first, :last %>

ma ciò non fornisce l'opzione "Altro". L'obiettivo è registrare "Apple", "Banana" o il valore specificato (digitato) se è stato scelto "Altro".

risposte:

1 per risposta № 1

Simple Form ci consente as: :radio_buttons su una collezione, in questo modo

<%= f.input :fruit, collection: ["apple", "banana", "other"], as: :radio_buttons %>

Vedere il sezione di raccolta del file README di SimpleForm per ulteriori informazioni sugli input di raccolta.


0 per risposta № 2

Una soluzione sarebbe quella di avere la f.collection_radio_buttons seguito da f.input, entrambi con lo stesso nome. Quindi, abilitare selettivamente f.input in base al pulsante di opzione selezionato con jquery o javascript. Perché funzioni, probabilmente vorrai anche aggiungere un'opzione ["Altro"] ["Altro"].

MODIFICARE Forse qualcosa del genere:

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 );
}});

Poiché hanno lo stesso nome, Rails utilizzerà l'ultimo valore (il campo di testo in questo caso se è abilitato), altrimenti utilizzerà il pulsante di opzione selezionato.