2017-10-13 8 views
0

J'ai besoin d'un moyen pour que mon formulaire ne soit pas envoyé si l'utilisateur n'a pas pris la peine de sélectionner des boutons radio.Les rails nécessitent un bouton radio d'une collection

Je voudrais à ce que dans la vue et le contrôleur, pas dans le modèle (les données ne devraient même pas être envoyés)

<%= form_tag("/bookings/new", method: "get") do %> 
    <% @flights.each do |flight| %> 
    <%= radio_button_tag :flight_id, flight.id %> 
    <% end %> 
    <%= submit_tag "book now" %> 
<% end %> 

modifier, de clarifier
normalement je ferais
<%= f.text_field :name, required: true %>
mais, comme je l'ai beaucoup de boutons radio et je besoin d'un seul pour la forme de travailler, je ne sais pas comment le mettre en œuvre

+0

Que voulez-vous dire "les données ne doivent pas être envoyés même"? Si vous ne souhaitez pas que le formulaire soit soumis (c'est-à-dire, aucun cycle de demande/réponse entre le frontal et le serveur), vous devez probablement utiliser javascript sur le frontal. – jvillian

+0

Vous voulez dire que vous voulez une validation en frontal et non en modèle? – krishnar

+1

Cette question est plus liée au javascript que liée aux rails. Cf: https://stackoverflow.com/questions/1423777/how-can-i-check-whether-a-radio-button-is-selected-with-javascript –

Répondre

1

Vous pouvez définir la validation dans le modèle pour voir la présence de case à cocher si javas cript est désactivé. C'est une méthode plus robuste.

validates :flight_id, :acceptance => true

Docs ici - http://guides.rubyonrails.org/active_record_validations.html#acceptance

Modifier

function validateCheckBox() { 
    var x = document.getElementById("flight_id").checked; 
    if(!x) {alert("Not checked")}   
} 

<%= submit_tag "book now" , :onclick => "validateCheckBox();" %> 
+0

Comme je l'ai écrit dans la deuxième ligne de mon post, je J'aimerais le faire dans la vue et le contrôleur, pas dans le modèle – Salomanuel

+1

Lorsque vous parlez de vues et de contrôleur, cela se traduit immédiatement par un problème frontal. Utilisez javascript. Voir éditer. – arjun