我有一个接受子属性的父模型。
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,也不会选中复选框。
关于如何将复选框显示为应该被检查的任何想法?
提前多多感谢。
答案 0 :(得分:0)
您需要引用您正在呼叫的用户中的特定spec
记录。尝试更改
<% fields_for "user[spec_attributes]" do |spec_form|%>
到
<% fields_for @user.spec do |spec_form|%>
您需要确保在编辑控制器操作中为用户构建了一个非零规范对象(但不一定保存)。
答案 1 :(得分:0)
您可以使用两个fields_for
调用来执行属性和嵌套属性,如下所示:
<%= form_tag(action) do %>
... other form tags ...
<%= fields_for :user, @user do |f| %>
<%= f.text_field :first_name %>
<%= f.text_field :last_name %>
<%= f.fields_for :spec do |s| %>
<%= s.check_box :alert_greeting %>
<%= s.label :alert_greeting, "Email me when new greetings are posted" %>
<% end %>
<% end %>
<% end %>