module ActiveScaffold::Actions::Subform

Public Instance Methods

edit_associated() click to toggle source
# File lib/active_scaffold/actions/subform.rb, line 3
def edit_associated
  do_edit_associated
  render :action => 'edit_associated', :formats => [:js], :readonly => @column.association.options[:readonly]
end

Protected Instance Methods

do_edit_associated() click to toggle source
# File lib/active_scaffold/actions/subform.rb, line 10
def do_edit_associated
  @parent_record = params[:id].nil? ? new_model : find_if_allowed(params[:id], :update)
  if @parent_record.new_record?
    apply_constraints_to_record @parent_record
    create_association_with_parent @parent_record if nested?
  end

  generate_temporary_id(@parent_record, params[:generated_id]) if @parent_record.new_record? && params[:generated_id]
  @column = active_scaffold_config.columns[params[:child_association]]

  # NOTE: we don't check whether the user is allowed to update this record, because if not, we'll still let them associate the record. we'll just refuse to do more than associate, is all.
  @record = @column.association.klass.find(params[:associated_id]) if params[:associated_id]
  if @record
    if (association = active_scaffold_config.columns[params[:child_association]].association.reverse)
      if @record.class.reflect_on_association(association).collection?
        @record.send(association) << @parent_record
      else
        @record.send("#{association}=", @parent_record)
      end
    end
  else
    @record = build_associated(@column.association, @parent_record)
  end
  @scope = params[:scope]
end