Simple form radio button

18,484

Solution 1

In your controller action, add this line

  def actionname
    @types = ModelName.select(:diettype).distinct
    ..
  end

where,

actionname is the action which is rendering your view.

ModelName is the name of your model which has diettype field in it.

In your view, replace

<%= f.collection_radio_buttons :diettype, [[vegan, 'vegan'] ,[vegetarian, 'vegetarian']]%>

with

<%= f.collection_radio_buttons :diettype, @types, :diettype, :diettype %>

EDIT:

<%= f.collection_radio_buttons :diettype, @types, :diettype, :diettype %>

The above line means:

Create a collection of radio buttons where,

1st :diettype : variable would be set when you select a radio button

@types : this collection being passed

2nd :diettype : the value that is being selected

3rd :diettype : the display text beside the button

EDIT2

As you specified that you need a static collection and you are not taking any values from database :

Simply add the following line in view, no need to change the controller :

<%= f.collection_radio_buttons :name, [['vegan', 'vegan'] ,['vegetarian', 'vegetarian']],:first, :last %> 

Solution 2

This is the simplest solution for adding radio buttons with Simple Form that works great for me.

 <%= f.input :diettype, as: :radio_buttons, collection: ['Vegan', 'Vegetarian'] %>
Share:
18,484
Samuel
Author by

Samuel

Constant learner

Updated on July 29, 2022

Comments

  • Samuel
    Samuel almost 2 years

    i'm using the simple_form gem and really like its simplicity. However, trying to set to set up a simple radio button is beyond me as I keep getting the following error

    "undefined local variable or method `vegan'"

    1.Here what I have so far

     <%= f.collection_radio_buttons :diettype, [[vegan, 'vegan'] ,[vegetarian, 'vegetarian']]%>
    

    2.Heres the code I used before simple_form with an update/patch method, which would update and save a users requirement

     <%= f.label(:diettype, "Vegan") %>
     <%= f.radio_button(:diettype, "Vegan") %>
     <%= f.label(:diettype, "vegetarian") %>
     <%= f.radio_button(:diettype, "vegetarian")%>
    

    3.And here is what I am trying to reproduce

    <select>
       <option> vegan </option>
       <option> Vegetarian </option>
    </select>
    

    NOTE - vegan and vegetarian are select options that will be stored in the database column of :diettype.

  • Samuel
    Samuel about 10 years
    Can you please explain this line of code? <%= f.collection_radio_buttons : diettype, @types, :diettype, :diettype %>
  • Kirti Thorat
    Kirti Thorat about 10 years
    Do you have any values in diettype column of your table? That error would be thrown if your collection is empty, i.e., @types = nil. I used @types as you said that select options that will be stored in the database column of :diettype. So, they should be present in order to display the list.
  • Samuel
    Samuel about 10 years
    please see my edit. I want to submit vegan or vegetarian values selected from the select option to :diettype coloum
  • Kirti Thorat
    Kirti Thorat about 10 years
    @samsos ok. so you need static collection with vegan and vegetarian as values. I'll update the answer.
  • Ekkstein
    Ekkstein about 6 years
    Hey, when trying to use this solution, I get an error stating that I am trying to call a private method select on my model. What am I missing?