Antoine
Antoine

Reputation: 109

ruby on rails - drop down list from model

I would like to create a drop down list with Ruby on rails from the model "Company" which has a item call "name". I would like to length of the dropdown list to be as long as Company.count (dynamic)

For example for 3 element in "Company":

 <%= f.select :company_brand, [[Company.find(1).name, Company.find(1).id],[Company.find(2).name, Company.find(2).id],[Company.find(3).name, Company.find(3).id]]%>

Upvotes: 0

Views: 6128

Answers (4)

7urkm3n
7urkm3n

Reputation: 6311

#League - form.html.erb
<%= f.collection_select(:game_id, Game.order(:title), :id, :title, {prompt: true}, {class: 'form-control col-md-7 col-xs-12', required: "required"})%>

#.html_output
<select class="form-control col-md-7 col-xs-12" required="required" name="league[game_id]" id="league_game_id"><option value="">Please select</option>
    <option value="2">csgo</option>
    <option value="1">dota2</option>
</select>

Upvotes: 1

Ravikiran V
Ravikiran V

Reputation: 3

You can try this i think this will help you.

<%= f.select :company_brand, options_from_collection_for_select(Company.all, "id", "name") %>

Upvotes: 0

W.M.
W.M.

Reputation: 776

You can do like this:

<%= select(:company_brand, Company.all.collect {|c| [ c.name, c.id ] }, { include_blank: true }) %>

Upvotes: 1

ulferts
ulferts

Reputation: 2242

collection_select (documentation) will provide what you need:

collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})

Returns and tags for the collection of existing return values of method for object's class. The value returned from calling method on the instance object will be selected. If calling method returns nil, no selection is made without including :prompt or :include_blank in the options hash.

The :value_method and :text_method parameters are methods to be called on each member of collection. The return values are used as the value attribute and contents of each tag, respectively. They can also be any object that responds to call, such as a proc, that will be called for each member of the collection to retrieve the value/text.

For your use case, this would mean changing the code to:

<%= f.collection_select(:company_brand, Company.all, :id, :name) %>

Upvotes: 1

Related Questions