0
0
RailsHow-ToBeginner · 3 min read

How to Use Select in Form Rails in Ruby on Rails

In Ruby on Rails, use the select helper inside a form builder to create a dropdown menu. It takes the attribute name, option values, and optional settings to render a select box in your form.
📐

Syntax

The select helper is used inside a form builder like form_with or form_for. It has this basic syntax:

  • attribute: the model attribute to set
  • option_tags: an array of options or a collection for the dropdown
  • options: optional hash for prompt or selected value
  • html_options: optional HTML attributes like class or id
ruby
form_with model: @user do |form|
  form.select :role, ['admin', 'user', 'guest'], { prompt: 'Select Role' }, { class: 'form-select' }
end
Output
<select class="form-select" name="user[role]" id="user_role"> <option value="">Select Role</option> <option value="admin">admin</option> <option value="user">user</option> <option value="guest">guest</option> </select>
💻

Example

This example shows a form for a User model with a role attribute. The select dropdown lets users pick a role from predefined options.

ruby
class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to @user
    else
      render :new
    end
  end

  private

  def user_params
    params.require(:user).permit(:name, :role)
  end
end

# In app/views/users/new.html.erb
<%= form_with model: @user do |form| %>
  <div>
    <%= form.label :name %><br>
    <%= form.text_field :name %>
  </div>
  <div>
    <%= form.label :role %><br>
    <%= form.select :role, ['admin', 'user', 'guest'], prompt: 'Select Role' %>
  </div>
  <div>
    <%= form.submit 'Create User' %>
  </div>
<% end %>
Output
<form action="/users" accept-charset="UTF-8" method="post"> <div> <label for="user_name">Name</label><br> <input type="text" name="user[name]" id="user_name" /> </div> <div> <label for="user_role">Role</label><br> <select name="user[role]" id="user_role"> <option value="">Select Role</option> <option value="admin">admin</option> <option value="user">user</option> <option value="guest">guest</option> </select> </div> <div> <input type="submit" name="commit" value="Create User" /> </div> </form>
⚠️

Common Pitfalls

Common mistakes when using select in Rails forms include:

  • Not passing options as an array or collection, causing errors.
  • Forgetting to include prompt for a default unselected option.
  • Using incorrect attribute names that don't match the model.
  • Not permitting the attribute in strong parameters, so the value is ignored.
ruby
form_with model: @user do |form|
  # Wrong: options not an array
  form.select :role, 'admin,user,guest'

  # Right: options as array
  form.select :role, ['admin', 'user', 'guest'], prompt: 'Select Role'
end
📊

Quick Reference

Tips for using select in Rails forms:

  • Use arrays or collections for options.
  • Add prompt for a placeholder option.
  • Use options_for_select if you want to preselect a value.
  • Pass HTML options like class or id as the last argument.

Key Takeaways

Use the form builder's select helper with attribute and options array to create dropdowns.
Always pass options as an array or collection, not a string.
Include a prompt option to guide users to select a value.
Permit the select attribute in strong parameters to save user input.
Use HTML options to style or add attributes to the select tag.