module ActiveScaffold::Actions::Update
Public Class Methods
included(base)
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 3 def self.included(base) base.before_filter :update_authorized_filter, :only => [:edit, :update] base.helper_method :update_refresh_list? base.helper_method :update_columns end
Public Instance Methods
edit()
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 9 def edit do_edit respond_to_action(:edit) end
update()
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 14 def update do_update respond_to_action(:update) end
update_column()
click to toggle source
for inline (inlist) editing
# File lib/active_scaffold/actions/update.rb, line 20 def update_column do_update_column render :action => 'update_column', :locals => {:column_span_id => params[:editor_id] || params[:editorId]} end
Protected Instance Methods
after_update_save(record)
click to toggle source
override this method if you want to do something after the save
# File lib/active_scaffold/actions/update.rb, line 128 def after_update_save(record); end
before_update_save(record)
click to toggle source
override this method if you want to inject data in the record (or its associated objects) before the save
# File lib/active_scaffold/actions/update.rb, line 125 def before_update_save(record); end
do_edit()
click to toggle source
A simple method to find and prepare a record for editing May be overridden to customize the record (set default values, etc.)
# File lib/active_scaffold/actions/update.rb, line 71 def do_edit register_constraints_with_action_columns(nested.constrained_fields, active_scaffold_config.update.hide_nested_column ? [] : [:update]) if nested? @record = find_if_allowed(params[:id], :update) end
do_update()
click to toggle source
A complex method to update a record. The complexity comes from the support for subforms, and saving associated records. If you want to customize this algorithm, consider using the before_update_save
callback
# File lib/active_scaffold/actions/update.rb, line 78 def do_update do_edit update_save end
do_update_column()
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 108 def do_update_column @record = active_scaffold_config.model.find(params[:id]) if @record.authorized_for?(:crud_type => :update, :column => params[:column]) column = active_scaffold_config.columns[params[:column].to_sym] params[:value] ||= @record.column_for_attribute(params[:column]).default unless @record.column_for_attribute(params[:column]).nil? || @record.column_for_attribute(params[:column]).null unless column.nil? params[:value] = column_value_from_param_value(@record, column, params[:value]) params[:value] = [] if params[:value].nil? && column.form_ui && column.plural_association? end @record.send("#{params[:column]}=", params[:value]) before_update_save(@record) @record.save after_update_save(@record) end end
edit_formats()
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 141 def edit_formats (default_formats + active_scaffold_config.formats).uniq end
edit_respond_to_html()
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 26 def edit_respond_to_html if successful? render(:action => 'update') else return_to_main end end
edit_respond_to_js()
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 33 def edit_respond_to_js render(:partial => 'update_form') end
update_columns()
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 149 def update_columns active_scaffold_config.update.columns end
update_columns_names()
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 153 def update_columns_names update_columns.collect(&:name) end
update_formats()
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 145 def update_formats (default_formats + active_scaffold_config.formats + active_scaffold_config.update.formats).uniq end
update_refresh_list?()
click to toggle source
should we refresh whole list after update operation
# File lib/active_scaffold/actions/update.rb, line 131 def update_refresh_list? active_scaffold_config.update.refresh_list end
update_respond_to_html()
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 36 def update_respond_to_html if params[:iframe]=='true' # was this an iframe post ? responds_to_parent do render :action => 'on_update.js', :layout => false end else # just a regular post if successful? flash[:info] = as_(:updated_model, :model => @record.to_label) return_to_main else render(:action => 'update') end end end
update_respond_to_js()
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 50 def update_respond_to_js if successful? && update_refresh_list? && !render_parent? do_search if respond_to? :do_search, true do_list end render :action => 'on_update' end
update_respond_to_json()
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 61 def update_respond_to_json column_names = successful? ? update_columns_names : error_object_attributes render :text => response_object.to_json(:only => column_names, :methods => virtual_columns(column_names)), :content_type => Mime::JSON, :status => response_status end
update_respond_to_xml()
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 57 def update_respond_to_xml column_names = successful? ? update_columns_names : error_object_attributes render :xml => response_object.to_xml(:only => column_names, :methods => virtual_columns(column_names)), :content_type => Mime::XML, :status => response_status end
update_respond_to_yaml()
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 65 def update_respond_to_yaml column_names = successful? ? update_columns_names : error_object_attributes render :text => Hash.from_xml(response_object.to_xml(:only => column_names, :methods => virtual_columns(column_names))).to_yaml, :content_type => Mime::YAML, :status => response_status end
update_save(options = {})
click to toggle source
# File lib/active_scaffold/actions/update.rb, line 83 def update_save(options = {}) begin active_scaffold_config.model.transaction do @record = update_record_from_params(@record, update_columns, params[:record]) unless options[:no_record_param_update] before_update_save(@record) self.successful = [@record.valid?, @record.associated_valid?].all? {|v| v == true} # this syntax avoids a short-circuit if successful? @record.save! and @record.save_associated! after_update_save(@record) else # some associations such as habtm are saved before saved is called on parent object # we have to revert these changes if validation fails raise ActiveRecord::Rollback, "don't save habtm associations unless record is valid" end end rescue ActiveRecord::RecordInvalid rescue ActiveRecord::StaleObjectError @record.errors.add(:base, as_(:version_inconsistency)) self.successful=false rescue ActiveRecord::RecordNotSaved @record.errors.add(:base, as_(:record_not_saved)) if @record.errors.empty? self.successful = false end end