【发布时间】:2011-03-28 12:39:58
【问题描述】:
我有一个接受子属性的父模型。
class User < ActiveRecord::Base
accepts_nested_attributes_for :spec
attr_accessible :name, :spec_attributes
在视图中,我有一个获取 3 个模型信息的表单。我使用通用的 form_tag。
<% form_tag(action) do %>
.
.
.
<% fields_for "user[spec_attributes]" do |spec_form|%>
<%= spec_form.check_box :alert_greeting %>
<%= spec_form.label :alert_greeting, "Email me when new greetings are posted" %>
<% end %>
<% end %>
在控制器中
@user = User.find(session[:user_id])
if @user.update_attributes(params[:user])
do something.
end
数据库正在更新,一切似乎都在工作。
但是,当我返回表单再次编辑时,即使复选框的值显示为 1,该复选框也未选中。
关于如何将复选框显示为应该被选中的任何想法?
非常感谢。
【问题讨论】:
-
尝试通过检查参数值添加选中选项:alert_greeting
-
您如何看到复选框的值为“1”?这是在新表单上还是只是数据库值存储为 1。
-
当我查看源代码时,我看到 value=1 但隐藏字段设置为 0。我还在终端和数据库中传递的参数中看到它。我只是不明白为什么它没有显示在表单上如果 value=1 ????
-
另外,当我查看传递的参数时,我看到值是 1,我也在数据库中看到它。
-
您看到 value=1 的复选框和 value=0 的隐藏字段的原因是 Rails 处理复选框的方式 - 它会创建一个隐藏字段,以便如果复选框不是t 被选中,一个值仍然被提交给服务器(如果它们没有被选中,复选框通常不会发送任何数据)。
标签: ruby-on-rails forms nested-attributes