Salomanuel
Salomanuel

Reputation: 955

Rails require radio button from a collection

I need a way for my form to not be sent if the user didn't bother to select any radio buttons.

I'd like to to that within the view and the controller, not in the model (the data shouldn't even be sent)

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

edit, to clarify
normally I'd do
<%= f.text_field :name, required: true %>
but, as I have many radio buttons and I only need one for the form to work, I don't know how to implement it

Upvotes: 1

Views: 1169

Answers (2)

Bek
Bek

Reputation: 2226

<%= f.text_field :name, required: true %>

This still works perfectly for radio buttons, and it's okay if it ends up on all radio items. The form will still only require one input.

I just tested it on my Rails 6 app.

Upvotes: 2

arjun
arjun

Reputation: 1614

You can set validation in the model to see the presence of checkbox if javascript is disabled. This is a more robust method.

validates :flight_id, :acceptance => true

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

Edit

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

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

Upvotes: 0

Related Questions