开发者

check box not showing check Rails

I have a parent model that accepts child attributes.

class User < ActiveRecord::Base

accepts_nested_attributes_for :spec

attr_accessible :name, :spec_attributes

In the view I have a form that gets information for 3 models. I use a generic 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 %>

In the Controller

@user = User.find(session[:user_id])
   if @user.update_attributes(params[:user])

   do something.
   end

The database is getting updated and the all seems to be working.

However when I go back to the form to edit again, even though the value for the checkbox is showing 1 the check box is not checked.

Any ideas as to how to show the checkbox as being checked when it is suppos开发者_运维问答ed to be?

Thanks a lot in advance.


You need to reference the specific spec record that is within the user you're calling. Try changing

<% fields_for "user[spec_attributes]" do |spec_form|%>

to

<% fields_for @user.spec do |spec_form|%>

You'll need to make sure that you have a non-nil spec object built for the user (but not necessarily saved) in your edit controller action.


You can do attributes and nested attributes using two fields_for calls like this:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜