从select_tag保存数据

时间:2011-06-24 13:57:02

标签: ruby-on-rails activerecord form-for html-select

尝试将数据从表单保存到数据库。 使用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”=&gt;“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 = Error,未定义的方法时。

我的模特

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您需要将“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 %>