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])