mongomapper は「accepts_nested_attributes_for」をサポートしていませんが、レール 3.2.7、mongo_mapper 0.11.2、mongo 1.6.4、bson 1.6.4 では次のように動作します。url_for、コントローラ メソッドなどのルーティングが正しくなるまで、「rake routes」を頻繁に参照してください。email.id の非表示フィールドと、新しいメール アイテムを作成するためのルートのボタンに注意してください。これは、埋め込まれたアソシエーション内の新しいアイテムのためのものです (put/update を完了する必要があります)。これがあなたの前進に役立つことを願っています。
-ゲイリー
アプリ/コントローラー/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
アプリ/ビュー/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