Rails: generate select box for form - ruby-on-rails

I want to make a select box for a collection. I use method options_for_select but It just generates <option></option> field, not <select></select> outside.
Here is my code:
<% categories_array = Category.all.map{|category| [category.name, category.id]} %>
<%= options_for_select(categories_array) %>
And here is the result:
<option value="5483c910485559047a000000">Programming</option>
<option value="5483c921485559047a010000">Business</option>
<option value="5483c92b485559047a020000">Game Programming</option>
But I expected:
<select id = "categoryId">
<option value="5483c910485559047a000000">Programming</option>
<option value="5483c921485559047a010000">Business</option>
<option value="5483c92b485559047a020000">Game Programming</option>
</select>
Moreover, I can get this value when publish this form to server. How can I do this
Thanks :)

You can see how select and options helpers are combined here:
http://guides.rubyonrails.org/form_helpers.html#making-select-boxes-with-ease
As noted there:
<%= select_tag(:city_id, options_for_select(...)) %>

Related

Dynamically populate select dropdown from parameters

How would I populate a select dropdown in my view to be the value of a certain parameter:
http://localhost:3000/?group_size=6 - where I want the dropdown selects to be 1-6 as so:
<select name="group_size">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
<option value="5">Five</option>
<option value="6">Six</option>
</select>
Best would be to display the text for the number, but at least to create the text fields without names would be needed. This is Ruby 2.3 Rails 4.2. What do I need to write in the view and/or controller to make this happen?
In your view you could do something like...
<select name="group_size">
<% (1..params[:group_size]).each_with_index do |i| %>
<option value="<%= i %>"><%= i %></option>
<% end %>
</select>
This creates a Range between 1 and whatever group size is passed. See the Ruby documentation for each_with_index here.
Note: This will break if no group_size is provided. I'll leave it to you to guard against nil. :)

Syntax for options_from_collections_for_select in rails 4

I'm trying to add a class to the select drop down populated using options_from_collection_for_select
Here's the snippet I'm working with:
<%= select_tag "instructor", options_from_collection_for_select(#instructors, "id", "full_name"), :include_blank => true %>
Where do html_options go in this instance?
Desired result:
<select id="example_select" name="example_select" class="example_class">
<option value></option>
<option value="1">Example option 1</option>
<option value="2">Example option 2</option>
</select>
I've tried to follow syntax for options_for_select and have only found questions relating to that tag specifically; it doesn't work as I'd expect.
Any advice for this question, and for select tag templating questions like this in general would be appreciated.
The answer is actually simple:
<%= select_tag "instructor", options_from_collection_for_select(#instructors, "id", "full_name"), :include_blank => true, :class => "example_class" %>
Will produce:
<select id="example_select" name="example_select" class="example_class">
<option value></option>
<option value="1">Example option 1</option>
<option value="2">Example option 2</option>
</select>
Thanks Jesse Goodfellow
Reference: http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-options_for_select

Options for Select, stick at selected Value

I'm trying to get the User's Selection to stick in the options_for_select.
Heres my code:
<div class="form-group">
<%= f.label :team_for, "I'm for" %> <br>
<%= f.select :team_for, options_for_select(User::TEAMFOR), :prompt => "Please Select" %>
</div>
How can i set this up?
My HTML output:
<div class="form-group">
<label for="user_team_for">I'm for</label> <br>
<select id="user_team_for" name="user[team_for]">
<option value="">Please Select</option>
<option value="Team Druid">Team 1</option>
<option value="Team Hunter">Team 2</option>
<option value="Team Mage">Team 3</option>
<option value="Team Paladin">Team 4</option>
<option value="Team Priest">Team 5</option>
<option value="Team Rogue">Team 6</option>
<option value="Team Shaman">Team 7</option>
<option value="Team Warrior">Team 8</option></select>
</div>
If i select something, it gets into the Database and is shown correctly, but on the Edit Page the selection is not shown, instead always "Team 1" is set as selected.
I need the selected value to be shown.
The 2nd param to options_for_select is the selected value: http://guides.rubyonrails.org/form_helpers.html#option-tags-from-a-collection-of-arbitrary-objects
The second argument to options_for_select must be exactly equal to the desired internal value. In particular if the value is the integer 2 you cannot pass "2" to options_for_select — you must pass 2. Be aware of values extracted from the params hash as they are all strings.
Try this:
<%= f.select :team_for, options_for_select(User::TEAMFOR, #user.team_for), :prompt => "Please Select" %>

Can't generate Chosen select using Rails helpers

I have styled beatiful select, but I need to connect it to database, so I have simple html code:
<select class="chzn-select" tabindex="1" style="width:300px;" data-placeholder="Choose a Category">
<option value=""></option>
<option value="Fashion">Fashion</option>
<option value="Coupon">Coupon</option>
<option value="Sport">Sport</option>
</select>
and code using rails form helpers:
<%= f.select :category, options_for_select(%w[Fashion Health Travel Food Coupons]), :class => "chzn-select"%>
EDIT: Add html code generated by rails :
<select id="website_category" name="website[category]"><option value="Fashion">Fashion</option>
<option value="Health">Health</option>
<option value="Travel">Travel</option>
<option value="Food">Food</option>
<option value="Coupons">Coupons</option></select>
It shows me blank page, however code is generating due to I see it in my Google console.
I should set all other attributes or what is porblem ?
What does you generated code look like? Can you post that?
If you're not generating any options, maybe try:
<%= f.select :category, options_for_select(["Fashion", "Health", "Travel", "Food", "Coupons"]), :class => "chzn-select"%>
I was needed to call it correctly from js file:
$("#website_category").chosen();

select option tag in ror?

i am new at ror.
option select tag in rails
<%= select_tag(:city_id, '<option value="1">Lisbon</option>,<option value="2">Madrid</option>' %>
produces this html:
<select id="city_id" name="city_id">
<option value="1">Lisbon</option>
<option value="2">hjkLisbon</option>
</select>
and option select tag
<%= select_tag(:city_id, options_for_select([['Lisbon', 1], ['Madrid', 2]])) %>
produces this html:
<select id="city_id" name="city_id">
<option value="1">Lisbon</option>
<option value="2">Madrid</option>
</select>
for second option select tag i am getting the dropdown with options but in first one i am not getting it, only dropdown is there in first one but no options.
can anybody please explain me why it is so?
If you only have these two cities you can use normal html
<select id="city_id" name="city_id">
<option value="1">Lisbon</option>
<option value="2">Madrid</option>
</select>
If you fetch the cities from you database you can do
select_tag ‘city_id’, options_for_select(#cities.collect{ |u| [u.name, u.id] })
This would generate something like:
<select id="city_id" name="city_id">
<option value="1">Lisbon</option>
<option value="2">Madrid</option>
</select>
Do not be afraid to use html. The most simple solution is the best solution.
Ref this
Change
<%= select_tag(:city_id, '<option value="1">Lisbon</option>,<option value="2">Madrid</option>' %>
To
<%= select_tag(:city_id, '<option value="1">Lisbon</option>,<option value="2">Madrid</option>') %>
You are not closing the select tag i.e. ) is missing
if you really want to keep selected the country name on edit page then..
<%= f.select :country, (country_name), :selected => #model.country %>
Where country_name is a method in helper.

Resources