module ActiveScaffold::Actions::Create
Public Class Methods
included(base)
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 3 def self.included(base) base.before_filter :create_authorized_filter, :only => [:new, :create] base.helper_method :create_columns end
Public Instance Methods
create()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 13 def create do_create respond_to_action(:create) end
new()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 8 def new do_new respond_to_action(:new) end
Protected Instance Methods
after_create_save(record)
click to toggle source
override this method if you want to do something after the save
# File lib/active_scaffold/actions/create.rb, line 126 def after_create_save(record); end
before_create_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/create.rb, line 123 def before_create_save(record); end
create_columns()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 146 def create_columns active_scaffold_config.create.columns end
create_columns_names()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 150 def create_columns_names update_columns.collect(&:name) end
create_formats()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 142 def create_formats (default_formats + active_scaffold_config.formats + active_scaffold_config.create.formats).uniq end
create_ignore?()
click to toggle source
The default security delegates to ActiveRecordPermissions
. You may override the method to customize.
# File lib/active_scaffold/actions/create.rb, line 131 def create_ignore? nested? && active_scaffold_config.list.always_show_create end
create_respond_to_html()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 35 def create_respond_to_html if params[:iframe]=='true' # was this an iframe post ? responds_to_parent do render :action => 'on_create.js', :layout => false end else if successful? flash[:info] = as_(:created_model, :model => @record.to_label) if active_scaffold_config.create.edit_after_create redirect_to params_for(:action => "edit", :id => @record.id) elsif active_scaffold_config.create.persistent redirect_to params_for(:action => "new") else return_to_main end else if !nested? && active_scaffold_config.actions.include?(:list) && active_scaffold_config.list.always_show_create do_list render(:action => 'list') else render(:action => 'create') end end end end
create_respond_to_js()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 61 def create_respond_to_js if successful? && active_scaffold_config.create.refresh_list && !render_parent? do_search if respond_to? :do_search, true do_list end render :action => 'on_create' end
create_respond_to_json()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 74 def create_respond_to_json column_names = successful? ? create_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, :location => response_location end
create_respond_to_xml()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 69 def create_respond_to_xml column_names = successful? ? create_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, :location => response_location end
create_respond_to_yaml()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 79 def create_respond_to_yaml column_names = successful? ? create_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, :location => response_location end
create_save()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 113 def create_save before_create_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_create_save(@record) end end
do_create()
click to toggle source
A somewhat complex method to actually create a new record. The complexity is from support for subforms and associated records. If you want to customize this behavior, consider using the before_create_save
and after_create_save
callbacks.
# File lib/active_scaffold/actions/create.rb, line 98 def do_create begin active_scaffold_config.model.transaction do @record = update_record_from_params(new_model, create_columns, params[:record]) apply_constraints_to_record(@record, :allow_autosave => true) if nested? create_association_with_parent(@record) register_constraints_with_action_columns(nested.constrained_fields) end create_save end rescue ActiveRecord::RecordInvalid end end
do_new()
click to toggle source
A simple method to find and prepare an example new record for the form May be overridden to customize the behavior (add default values, for instance)
# File lib/active_scaffold/actions/create.rb, line 86 def do_new @record = new_model apply_constraints_to_record(@record) if nested? create_association_with_parent(@record) register_constraints_with_action_columns(nested.constrained_fields) end @record end
new_formats()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 139 def new_formats (default_formats + active_scaffold_config.formats).uniq end
new_respond_to_html()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 23 def new_respond_to_html if successful? render(:action => 'create') else return_to_main end end
new_respond_to_js()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 31 def new_respond_to_js render(:partial => 'create_form') end
response_location()
click to toggle source
# File lib/active_scaffold/actions/create.rb, line 19 def response_location url_for(params_for(:action => "show", :id => @record.id)) if successful? end