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 setoption_tags: an array of options or a collection for the dropdownoptions: optional hash for prompt or selected valuehtml_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
promptfor 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
promptfor a placeholder option. - Use
options_for_selectif you want to preselect a value. - Pass HTML options like
classoridas 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.