Сохранение данных из select_tag - PullRequest
1 голос
/ 24 июня 2011

Попытка сохранить данные из формы в базу данных. Использование select_tag

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

Все хорошо, он захватывает как размер, так и адрес электронной почты, но когда я пытаюсь сохранить данные из формы (размера), он пропускает NULL.

Вот моя консоль:

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"=>"5@gmail.com"}, "commit"=>"Create User"}
AREL (0.4ms)  INSERT INTO "users" ("email", "size", "created_at", "updated_at") VALUES
 ('5@gmail.com', 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

Итак, он получает правильные данные из формы, как вы видите "size" => "small", но когда его время сохранить, он передает их как NULL,

 VALUES ('5@gmail.com', NULL, '2011-06-24

Я думал, это был select_tag, так как к нему не прикреплено, как text_field делает

<%= 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 %>

Но когда я попробовал u.select_tag = Ошибка, неопределенный метод.

Моя модель

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

Есть мысли?

1 Ответ

1 голос
/ 24 июня 2011

Вам необходимо, чтобы параметр size был вложен в хеш "users". Когда вы смотрите в журнале, вы хотите убедиться, что видите что-то вроде этого:

"user"=>{"email"=>"5@gmail.com", "size"=>"small"}

Чтобы добиться этого внутри формы, вы можете сохранить существующий select_tag и расширить его следующим образом:

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

Или вы для этого случая выглядите так, как будто вы можете использовать collection_select для объекта формы:

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