复选框没有显示检查Rails

时间:2011-03-28 12:39:59

标签: ruby-on-rails forms nested-attributes

我有一个接受子属性的父模型。

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,也不会选中复选框。

关于如何将复选框显示为应该被检查的任何想法?

提前多多感谢。

2 个答案:

答案 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 %>