tylermauthe
tylermauthe

Reputation: 488

Creating forms for Multiple Nested Resources in Rails 3

I have been following Ryan Bates' tutorial on nested forms Railscast 196

The form for the new action shows the nested attributes for quizzes but does not show nested attributes for the key. I am guessing this is because quizzes have a has_many relationship where key has a has_one relationship... But I cannot figure out what I'm doing wrong?

Any help is much appreciated!

This is my model:

class Repository < ActiveRecord::Base
   has_many :quizzes, :dependent => :destroy
   has_one :key, :dependent => :destroy

   accepts_nested_attributes_for :key, :quizzes
end

This is my controller:

def new
  @repository = Repository.new
  3.times { @repository.quizzes.build }
  @repository.key = Key.new

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @repository }
  end
end

This is my view:

<div class="field">
  <%= f.label :wp_uid %><br />
  <%= f.text_field :wp_uid %>
<% f.fields_for :quizzes do |quiz_fields| %>
  <p>
    <%= quiz_fields.label :name, "Name" %><br />
    <%= quiz_fields.text_field :name %>
  </p>
<% end %>
<% f.fields_for :key do |key_fields| %>
  <div class="field">
  <%= key_fields.label :value, "Value" %><br />
  <%= key_fields.text_field :value %>
  </div>
  <div class="field">
  <%= key_fields.label :expiry, "Expiry" %><br />
  <%= key_fields.date_select :expiry %>
  </div>
<% end %>
</div>
<div class="actions">
  <%= f.submit %>
</div>
<% end %>

Upvotes: 2

Views: 712

Answers (2)

naren
naren

Reputation: 937

Try building the key object as

@reposity.build_key

From the rails docmentation http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#label-Unsaved+objects+and+associations

If you wish to assign an object to a has_one association without saving it, use the build_association method. The object being replaced will still be saved to update its foreign key.

Upvotes: 0

JDutil
JDutil

Reputation: 3642

You should try modifying your fields_for blocks to use <%= %>

Try changing to:

<%= f.fields_for :key do |key_fields| %>

The railscast could have been made before the change in Rails 3 to use <%= %> instead of <%%>.

Ryan has a nested_form gem that you may find useful for this as well. I haven't tried using it yet, but plan to next time I start a new project.

https://github.com/ryanb/nested_form

Upvotes: 1

Related Questions