app/controllers/main.rb in sferik-merb-admin-0.3.2 vs app/controllers/main.rb in sferik-merb-admin-0.3.3

- old
+ new

@@ -7,11 +7,11 @@ before :find_models, :only => ['index'] before :find_model, :exclude => ['index'] before :find_object, :only => ['edit', 'update', 'delete', 'destroy'] def index - render(:layout => "dashboard") + render(:layout => 'dashboard') end def list options = {} merge_filter(options) @@ -23,11 +23,11 @@ :limit => 200, }.merge(options) @objects = @abstract_model.find_all(options).reverse else # monkey patch pagination - @abstract_model.model.class_eval("is_paginated") unless @abstract_model.model.respond_to?(:paginated) + @abstract_model.model.class_eval('is_paginated') unless @abstract_model.model.respond_to?(:paginated) @current_page = (params[:page] || 1).to_i options = { :page => @current_page, :per_page => MerbAdmin[:per_page], }.merge(options) @@ -37,67 +37,69 @@ options.delete(:offset) options.delete(:limit) end @record_count = @abstract_model.count(options) - render(:layout => "list") + render(:layout => 'list') end def new @object = @abstract_model.new - render(:layout => "form") + render(:layout => 'form') end def edit - render(:layout => "form") + render(:layout => 'form') end def create object = params[@abstract_model.singular_name] || {} # Delete fields that are blank object.each do |key, value| object[key] = nil if value.blank? end - associations = @abstract_model.has_many_associations.map{|association| [association, (params[:associations] || {}).delete(association[:name])]} + has_one_associations = @abstract_model.has_one_associations.map{|association| [association, (params[:associations] || {}).delete(association[:name])]} + has_many_associations = @abstract_model.has_many_associations.map{|association| [association, (params[:associations] || {}).delete(association[:name])]} @object = @abstract_model.new(object) - if @object.save && associations.each{|association, ids| update_has_many_association(association, ids)} + if @object.save && has_one_associations.each{|association, id| update_has_one_association(association, id)} && has_many_associations.each{|association, ids| update_has_many_association(association, ids)} if params[:_continue] redirect(slice_url(:admin_edit, :model_name => @abstract_model.singular_name, :id => @object.id), :message => {:notice => "#{@abstract_model.pretty_name.capitalize} was successfully created"}) elsif params[:_add_another] redirect(slice_url(:admin_new, :model_name => @abstract_model.singular_name), :message => {:notice => "#{@abstract_model.pretty_name.capitalize} was successfully created"}) else redirect(slice_url(:admin_list, :model_name => @abstract_model.singular_name), :message => {:notice => "#{@abstract_model.pretty_name.capitalize} was successfully created"}) end else message[:error] = "#{@abstract_model.pretty_name.capitalize} failed to be created" - render(:new, :layout => "form") + render(:new, :layout => 'form') end end def update object = params[@abstract_model.singular_name] || {} # Delete fields that are blank object.each do |key, value| object[key] = nil if value.blank? end - associations = @abstract_model.has_many_associations.map{|association| [association, (params[:associations] || {}).delete(association[:name])]} - if @object.update_attributes(object) && associations.each{|association, ids| update_has_many_association(association, ids)} + has_one_associations = @abstract_model.has_one_associations.map{|association| [association, (params[:associations] || {}).delete(association[:name])]} + has_many_associations = @abstract_model.has_many_associations.map{|association| [association, (params[:associations] || {}).delete(association[:name])]} + if @object.update_attributes(object) && has_one_associations.each{|association, id| update_has_one_association(association, id)} && has_many_associations.each{|association, ids| update_has_many_association(association, ids)} if params[:_continue] redirect(slice_url(:admin_edit, :model_name => @abstract_model.singular_name, :id => @object.id), :message => {:notice => "#{@abstract_model.pretty_name.capitalize} was successfully updated"}) elsif params[:_add_another] redirect(slice_url(:admin_new, :model_name => @abstract_model.singular_name), :message => {:notice => "#{@abstract_model.pretty_name.capitalize} was successfully updated"}) else redirect(slice_url(:admin_list, :model_name => @abstract_model.singular_name), :message => {:notice => "#{@abstract_model.pretty_name.capitalize} was successfully updated"}) end else message[:error] = "#{@abstract_model.pretty_name.capitalize} failed to be updated" - render(:edit, :layout => "form") + render(:edit, :layout => 'form') end end def delete - render(:layout => "form") + render(:layout => 'form') end def destroy if @object.destroy redirect(slice_url(:admin_list, :model_name => @abstract_model.singular_name), :message => {:notice => "#{@abstract_model.pretty_name.capitalize} was successfully destroyed"}) @@ -131,11 +133,11 @@ return unless params[:filter] params[:filter].each_pair do |key, value| @properties.each do |property| next unless property[:name] == key.to_sym if property[:type] == :boolean - options.merge!(key.to_sym => (value == "true")) + options.merge!(key.to_sym => (value == 'true')) elsif property[:type] == :integer && property[:flag_map] options.merge!(key.to_sym => value.to_sym) end end end @@ -148,16 +150,23 @@ @properties.each do |property| next unless property[:type] == :string condition_statement << "#{property[:name]} LIKE ?" conditions << "%#{params[:query]}%" end - conditions.unshift(condition_statement.join(" OR ")) - options.merge!(:conditions => conditions) unless conditions == [""] + conditions.unshift(condition_statement.join(' OR ')) + options.merge!(:conditions => conditions) unless conditions == [''] end def merge_sort(options) return unless params[:sort] options.merge!(:order => [params[:sort].to_sym.send(params[:sort_reverse] ? :desc : :asc)]) + end + + def update_has_one_association(association, id) + model = MerbAdmin::AbstractModel.new(association[:child_model]) + if object = model.find(id) + object.update_attributes(association[:child_key] => @object.id) + end end def update_has_many_association(association, ids) # Remove all of the associated items relationship = @object.send(association[:name])