While mongomapper does not support "accepts_nested_attributes_for", the follwing works for me
with rails 3.2.7, mongo_mapper 0.11.2, mongo 1.6.4, bson 1.6.4.
Refer often to "rake routes" until the routing is correct, i.e., url_for, controller methods, etc.
Please note the hidden field for email.id and the button with the route to create a new email item.
This is just for a new item in an embedded association (you get to complete the put/update).
Hope that this helps you move forward.
-Gary
app/controllers/ecards_controller.rb
class EcardsController < ApplicationController
def new
@ecard = Ecard.create
respond_to do |format|
format.html { render :template => 'ecards/show' }
format.json { render json: @ecard }
end
end
def show
@ecard = Ecard.find(params[:id])
respond_to do |format|
format.html { render :template => 'ecards/show' }
format.json { render json: @ecard }
end
end
end
app/controllers/emails_controller.rb
class EmailsController < ApplicationController
def new
@ecard = Ecard.find(params[:ecard_id])
@ecard.emails << Email.new
@ecard.save
respond_to do |format|
format.html { render :template => 'ecards/show' }
format.json { render json: @ecard }
end
end
end
app/views/ecards/show.html.erb
<%= form_for(@ecard) do |f| %>
<%= f.label :family, :scope => :name %><br />
<%= f.text_field :family %><br />
<% @ecard.emails.each do |email| %>
<%= f.fields_for email, :index => email do |e| %>
<%= e.hidden_field :id, :value => email.id %>
<%= e.label :pref %>
<%= e.check_box :pref %>
<%= e.label :email %>
<%= e.text_field :email %>
<br/>
<% end %>
<% end %>
<% end %>
<%= button_to 'New Email', url_for([:new, @ecard, :email]), :method => :get %>
config/routes.rb
resources :ecards do
resources :emails
end