I want to submit some information that isn’t a column on a model, so I’m using a select_tag:
= form_for [:admin, @post] do |f|
= f.error_messages
%p
= select_tag :category_name, options_from_collection_for_select(Category.all, :id, :category_name)
...
It generates html that looks right:
<form id="edit_post_1" class="edit_post" method="post" action="/admin/admin_posts/1" accept-charset="UTF-8">
<div style="margin:0;padding:0;display:inline">
<p>
<select id="category_name" name="category_name">
<option value="6">City</option>
<option value="7">College</option>
<option value="8">Sports</option>
<option value="9">Work</option>
</select>
</p>
<p>
<label for="subcat_prefix">Subcategory Name</label>
But the Rails controller always sees "category_name"=>"", in the params. I’m missing something obvious, but what?
Edit: server log on submitting:
Started POST "/admin/admin_posts/1" for 127.0.0.1 at 2012-02-22 15:06:52 -0800
Processing by Admin::AdminPostsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"CmG+YPFuaKfg+liipxJI6PKQHmbdJ4m2VtJmeD2dRqk=", "post"=>{"subcat_prefix"=>"In", "subtopic_name"=>"City perferendis", "post_content"=>"Explicabo dolor totam fuga voluptatem nam voluptatibus voluptatibus beatae aliquam ducimus et voluptate deleniti dignissimos et. Eum ipsam quos quo voluptas laboriosam delectus adipisci veniam similique libero eaque dolor dolorem libero autem ex aliquam non"}, "category_name"=>"", "commit"=>"Update Post", "id"=>"1"}
There might be another field with the same name lower which is overwriting the value.
Check with running
document.querySelectorAll('[name=category_name]')in your js console.