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