RedRory
RedRory

Reputation: 632

Saving data from select_tag

Trying to save data from a form to the database. Using the select_tag

<%= select_tag :size, options_from_collection_for_select(@plan, 'name', 'size') %>

Everything is fine, it grabs both size and email ,but when I try to store the data from the form (size), it passes NULL.

Here's my console:

Started POST "/users" for 127.0.0.1 at 2011-06-24 07:25:29 -0500
Processing by UserController#create as HTML
Parameters: {"utf8"=>"✓",   "authenticity_token"=>"MfT3gs5TtR+bvpaLro0E8Qm1zojaY2ms9WK0WprKPAw=", "size"=>"small",
"user"=>{"email"=>"[email protected]"}, "commit"=>"Create User"}
AREL (0.4ms)  INSERT INTO "users" ("email", "size", "created_at", "updated_at") VALUES
 ('[email protected]', NULL, '2011-06-24 12:25:29.646814', '2011-06-24 12:25:29.646814')
Redirected to http://localhost:3000/users/14
Completed 302 Found in 56ms

So, It gets the correct data from the form, as you see "size"=>"small", but when its time to store it, it passes it as NULL,

 VALUES ('[email protected]', NULL, '2011-06-24

I thought, it was the select_tag, as it doesnt have u attached, as text_field does

<%= form_for @user do |u| %>
                    <%= render 'shared/error_messages' %>
                        <p><%= u.label :size, 'How many employees do you have?' %>: </p>
                        <p><%= select_tag :size, options_from_collection_for_select(@plan, 'name', 'size') %></p>

                        <p><%= u.label :email, 'What\'s your email address?' %>:</p>
                        <p><%= u.text_field :email %></p>
                        <%= u.submit%>
                    <% end %>

But when I tried u.select_tag = Error, undefined method.

My model

  class User < ActiveRecord::Base
attr_accessible :size, :email
end

Any thoughts?

Upvotes: 1

Views: 399

Answers (1)

Aaron Hinni
Aaron Hinni

Reputation: 14716

You need to have the "size" param nested inside of the "users" hash. When you look in the log you want to verify seeing something like this:

"user"=>{"email"=>"[email protected]", "size"=>"small"}

To achieve that inside of of your form for, you can keep your existing select_tag and scope it as such:

<%= select_tag 'user[size]', options_from_collection_for_select(@plan, 'name', 'size') %>

Or you for this case it looks like you could use collection_select scoped on the form object:

<%= u.collection_select :size, @plan, :name, :size %>

Upvotes: 1

Related Questions