Skip to content

Instantly share code, notes, and snippets.

@melcher
Forked from kritik/gist:1256399
Created December 28, 2013 20:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save melcher/8163894 to your computer and use it in GitHub Desktop.
Save melcher/8163894 to your computer and use it in GitHub Desktop.
Rails Admin nested form example
class Product < ActiveRecord::Base
has_many :material_product_mappings, :dependent => :destroy, :inverse_of => :product
has_many :materials, :through => :material_product_mappings, :autosave => true
accepts_nested_attributes_for :material_product_mappings # really needed feature
#...
end
class MaterialProductMapping < ActiveRecord::Base
belongs_to :product, :inverse_of => :material_product_mappings
belongs_to :material, :inverse_of => :material_product_mappings
validates :num_units,
:numericality => { :greater_than_or_equal_to => 0 }
def name
"#{self.material.name} (#{self.material.unit.name}) x #{self.num_units}"
end
end
# file .../config/initializers/rails_admin.rb
RailsAdmin.config do |config|
config.model MaterialProductMapping do
edit do
form_builder :nested_form_for
field :material_product_mappings do
label "Materials"
partial "edit_material_product_mappings"
end
#...
end
end
end
# file .../app/views/rails_admin/main/_edit_material_product_mappings.html.erb
<div class="field <%= field.dom_id %>">
<% _saved_object = @object %>
<% _saved_form = form %>
<% _saved_field = field %>
<%# add here basic element's fileds if you have them %>
<%= label_tag(field.dom_id, field.label) %>
<div style="clear:left;padding-left:100px">
<%= form.fields_for(:material_product_mappings) %>
<p>
<%= form.link_to_add('Add Material ', :material_product_mappings) %>
</p>
<% @object = _saved_object %>
<% form = _saved_form %>
<% field = _saved_field %>
<% if field.has_errors? %>
<span class="errorMessage"><%= "#{field.label } #{field.errors.first}" %></span>
<% end %>
</div>
</div>
# file .../app/views/rails_admin/main/_material_product_mapping_fields.html.erb
# nested form looks for this file...
<% ff = f %>
<% ff.object.errors.full_messages.each do |msg| %>
<p class="flash_alert_msg"><%= msg %></p>
<% end %>
<%= ff.number_field(:num_units, :min => 0.0, :step => 0.01, :size => 6, :style => "text-align:right") %>
<%= ff.collection_select('material_id',Material.active,:id,:name,:prompt => false) %>
<%= ff.link_to_remove('Remove') %>
I also had to override javascripts to make nested resources working. I hope that this will be fixed in future releases
# file .../app/assets/javascripts/rails_admin/rails_admin.js
//= require rails_admin/jquery-1.6.2.js
//= require rails_admin/jquery_ujs.js
//= require rails_admin/jquery-ui-1.8.14.js
//= require rails_admin/jquery.ui.timepicker.js
//= require rails_admin/ra.datetimepicker.js
//= require rails_admin/ra.filter-box.js
//= require rails_admin/activo/application.js
//= require rails_admin/activo/jquery.tipsy.js
//= require rails_admin/ra.filtering-multiselect.js
//= require rails_admin/ra.filtering-select.js
//= require rails_admin/ra.remote-form.js
//= require rails_admin/ra.timeline.js
//= require rails_admin/jquery.colorpicker.js
//= require jquery_nested_form
//= require rails_admin/application.js
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment