Ticket #508: page_controller_refactor.diff
| File page_controller_refactor.diff, 3.7 kB (added by igotimac, 1 year ago) |
|---|
-
app/models/page_part.rb
old new 15 15 object_id_attr :filter, TextFilter 16 16 17 17 end 18 19 module PagePart::AssociationExtension 20 21 def [](index) 22 if index.is_a? String 23 self.each do |part| 24 if part.name == index 25 return part 26 end 27 end 28 return nil 29 else 30 super 31 end 32 end 33 34 def update_association(params) 35 original_names = self.map { |part| part.name } 36 submited_part_names = (params[:part] || {}).values.map { |part| part[:name] } 37 names_to_remove = (original_names - submited_part_names) 38 39 submited_part_names.each_with_index do |name, index| 40 v = params[:part].values[index] 41 part = self[name] 42 if part.nil? 43 #create new part 44 new_part = PagePart.new; 45 new_part.attributes = v; 46 self << new_part 47 else 48 #update exisiting part 49 part.attributes = part.attributes.merge( v ) 50 end 51 end 52 53 names_to_remove.each { |name| delete( self[name] ) } 54 end 55 56 def save 57 self.each do |part| 58 part.save 59 end 60 end 61 62 end -
app/models/page.rb
old new 9 9 10 10 # Associations 11 11 acts_as_tree :order => 'virtual DESC, title ASC' 12 has_many :parts, :class_name => 'PagePart', :order => 'id', :dependent => :destroy 12 has_many :parts, :class_name => 'PagePart', :order => 'id', :dependent => :destroy, 13 :extend => PagePart::AssociationExtension 14 13 15 belongs_to :_layout, :class_name => 'Layout', :foreign_key => 'layout_id' 14 16 belongs_to :created_by, :class_name => 'User', :foreign_key => 'created_by' 15 17 belongs_to :updated_by, :class_name => 'User', :foreign_key => 'updated_by' … … 83 85 end 84 86 end 85 87 88 def update_associations_each 89 Page.reflect_on_all_associations.each do 90 |relation| 91 association = self.send(relation.name) 92 if association.respond_to?( :update_association ) 93 yield association 94 end 95 end 96 end 97 98 def update_associations(params) 99 update_associations_each do |association| 100 association.update_association(params) 101 end 102 end 103 104 def save 105 if result = super 106 update_associations_each do |association| 107 association.save 108 end 109 end 110 result 111 end 112 86 113 def process(request, response) 87 114 @request, @response = request, response 88 115 if layout -
app/controllers/admin/page_controller.rb
old new 92 92 end 93 93 94 94 def save 95 parts = @page.parts 96 parts_to_update = {} 97 (params[:part]||{}).each {|k,v| parts_to_update[v[:name]] = v } 98 99 parts_to_remove = [] 100 @page.parts.each do |part| 101 if(attrs = parts_to_update.delete(part.name)) 102 part.attributes = part.attributes.merge(attrs) 103 else 104 parts_to_remove << part 105 end 106 end 107 parts_to_update.values.each do |attrs| 108 @page.parts.build(attrs) 109 end 110 if result = @page.save 111 new_parts = @page.parts - parts_to_remove 112 new_parts.each { |part| part.save } 113 @page.parts = new_parts 114 end 115 result 95 @page.update_associations(params) 96 @page.save 116 97 end 117 98 118 99 def clear_model_cache
