Для действия создания нужны только вложенные параметры, предусмотренные для: вспышка (модели работают).
def create
@outbreak = Outbreak.new(params[:outbreak])
@outbreak.user_id = current_user.id
respond_to do |format|
if @outbreak.save
flash[:notice] = 'Outbreak was successfully created.'
format.html { redirect_to(@outbreak) }
format.xml { render :xml => @outbreak, :status => :created, :location => @outbreak }
else
format.html { render :action => "new" }
format.xml { render :xml => @outbreak.errors, :status => :unprocessable_entity }
end
end
end
Форма вспышки довольно длинная, поэтому я сократил ее до двух упомянутых разделов.(хотя здесь, вероятно, больше атрибутов и полей, чем нужно, чтобы понять).
Пример идентификатора HTML-элемента для вложенных полей можно найти внизу в помощнике Javascript наблюд. поле.Пост, который я сделал для обновлений AJAX для nested_attributes_for partials, также может быть полезен Обновление AJAX для acceptpts_nested_attributes_for
<% form_for(@outbreak, :html => {:multipart => true}) do |form| %>
<%= form.error_messages %>
<div id="tabs">
<ul>
<li ><a href="#tabs_b">Outbreak</a></li>
<li ><a href="#tabs_c">Location</a></li>
</ul>
<div id="tabs_b">
<fieldset id="b" class="form_div">
<legend>Outbreak</legend>
<fieldset>
<legend>References</legend>
<div class="left_form">
<%= form.label :user_reference %>
</div>
<div class="right_form">
<%= form.text_field :user_reference %>
</div>
<div style="clear:both;"></div>
</fieldset>
</fieldset>
</div>
<div id="tabs_c">
<fieldset id="c" class="form_div" >
<legend>Location</legend>
<div id="location_error"></div>
<fieldset>
<legend>Setting</legend>
<% form.fields_for :incidents do |incident_form| %>
<div class="left_form">
<%= incident_form.label :category_id %>
</div>
<div class="right_form">
<div id="incident_category_select">
<%= render :partial => 'category_select', :locals => {:categories => @categories, :incident_form => incident_form} %>
</div>
</div>
<div style="clear:both;"></div>
<div class="left_form">
<%= incident_form.label :subcategory_id %>
</div>
<div class="right_form">
<div id="incident_subcategory_select">
<%= render :partial => 'subcategory_select', :locals => { :subcategories => @subcategories, :incident_form => incident_form } %>
</div>
</div>
<div style="clear:both;"></div>
<div class="left_form">
<%= incident_form.label :subtype_id %>
</div>
<div class="right_form">
<div id="incident_subtype_select">
<%= render :partial => 'subtype_select', :locals => { :subtypes => @subtypes, :incident_form => incident_form } %>
</div>
</div>
<div style="clear:both;"></div>
<div id="cuisine_div">
<% if @outbreak.outbreak_type == "FOODBORNE" %>
<div class="left_form">
<%= label :incident, :cuisine_id %>
</div>
<div class="right_form">
<% cuisine_select = (@incident != nil ? @incident.cuisine_id.to_i : '') %>
<%= incident_form.select( :cuisine_id, "<option value='' >Please select</option>" + options_from_collection_for_select(@cuisines, :id, :name, cuisine_select)) %>
</div>
<% end %>
</div>
<div style="clear:both;"></div>
<div class="left_form">
<%= incident_form.label :detail %>
</div>
<div class="right_form">
<%= incident_form.text_field :detail %>
</div>
</fieldset>
<fieldset>
<legend>Details</legend>
<% incident_form.fields_for :location do |location_form| %>
<div style="clear:both;"></div>
<div class="left_form">
<%= location_form.label :placename %>
</div>
<div class="right_form">
<%= location_form.text_field :placename %>
</div>
<div style="clear:both;"></div>
<div class="left_form">
<%= location_form.label :address_1 %>
</div>
<div class="right_form">
<%= location_form.text_field :address_1 %>
</div>
<div style="clear:both;"></div>
<div class="left_form">
<%= location_form.label :address_2 %>
</div>
<div class="right_form">
<%= location_form.text_field :address_2 %>
</div>
<div style="clear:both;"></div>
<div class="left_form">
<%= location_form.label :address_3 %>
</div>
<div class="right_form">
<%= location_form.text_field :address_3 %>
</div>
<div style="clear:both;"></div>
<div class="left_form">
<%= location_form.label :town %>
</div>
<div class="right_form">
<%= location_form.text_field :town %>
</div>
<div style="clear:both;"></div>
<div class="left_form">
<%= location_form.label :postcode %>
</div>
<div class="right_form">
<%= location_form.text_field :postcode %>
</div>
<div style="clear:both;"></div>
<div class="left_form">
<%= location_form.label :region_id %>
</div>
<div class="right_form" >
<% region_select = (@location != nil ? @location.region_id.to_i : '') %>
<%= location_form.select(:region_id, "<option value=''>Select a region</option>" + options_from_collection_for_select(@regions, :id, :name, region_select)) %>
</div>
<div style="clear:both;"></div>
<div class="left_form">
<%= location_form.label :hpu_id %>
</div>
<div class="right_form" >
<% hpu_select = (@location != nil ? @location.hpu_id.to_i : '') %>
<%= location_form.select(:hpu_id, "<option value=''>Select a HPU</option>" + options_from_collection_for_select(@hpus, :id, :name, hpu_select)) %>
</div>
<div style="clear:both;"></div>
<%= location_form.hidden_field :lon, :value => '' %>
<%= location_form.hidden_field :lat, :value => '' %>
<%= hidden_field_tag :postcode_error, :value => '0' %>
<% end %>
</fieldset>
<% end %>
</fieldset>
</div>
</div>
<% end %>
<div style="clear: both; margin: 10px;"></div>
<%= observe_field(:outbreak_incidents_attributes_0_location_attributes_postcode,
:url => { :controller => :locations, :action => :find_lonlat },
:on => "onchange",
:loading => "Element.show('loader')",
:success => "Element.hide('loader')",
:with => "'postcode=' + encodeURIComponent($('outbreak_incidents_attributes_0_location_attributes_postcode').value)" ) %>