h1. Duplicate Action for ActiveScaffold

Currently, this gem is compatible with ActiveScaffold >= 3.3.x gems and rails >= 4.0. Use 1.0.x for rails >= 3.x versions.

h2. Overview

This gem adds an action to clone records. By default will only set attributes and belongs_to associations. You must override initialize_dup in your model or define a method to clone the record and set in conf.duplicate.method.

h2. Installation

You'll need at least ActiveScaffold 3.3.x to use this, and rails 3.x

<pre> gem install active_scaffold_duplicate </pre>

h2. Usage

h4. Step 1

Override initialize_dup in the model to set some attributes or copy associations:

<pre> # app/models/bill.rb class Bill < ActiveRecord::Base

belongs_to :customer
has_many :items

def initialize_dup(other)
  super
  self.items = other.items.map(&:dup)
end

end </pre>

h4. Step 2

Add duplicate action.

<pre> class BillsController < ApplicationController

active_scaffold do |conf|
  conf.actions << :duplicate
end

end </pre>

h4. Step 3

Change method to :get in link if you want to display create form instead of cloning record. Set position to :replace or :after for inline display, or enable page rendering.

<pre> class BillsController < ApplicationController

active_scaffold do |conf|
  conf.duplicate.link.method = :get
  conf.duplicate.link.position = :after
  #conf.duplicate.link.page = true # for new page rendering
end

end </pre>

Also you can change it globally.

<pre> class ApplicationController < ActionController::Base

active_scaffold.set_defaults do |conf|
  conf.duplicate.link.method = :get
  conf.duplicate.link.position = :after
  #conf.duplicate.link.page = true # for new page rendering
end

end </pre>

You can access to record which is being duplicated in your form overrides with @old_record variable.

If you use :post method, you can enable refresh_list to refresh the list instead of only adding new record at top, or set action_after_clone to open edit form for example:

<pre>

conf.duplicate.refresh_list = true
conf.duplicate.action_after_clone = :edit

</pre>

h2. Before/after controller methods

It's possible to define some methods to add some custom code which require access to session or request params:

h2. Support

If you have issues installing the gem, search / post to the “Active Scaffold”:groups.google.com/group/activescaffold forum or “Create an issue”:github.com/activescaffold/active_scaffold_duplicate/issues

h2. Contributing

Fork, hack, push, and request a pull:

github.com/activescaffold/active_scaffold_duplicate/

h2. License

Released under the MIT license (included).

h2. Author

Contact me: <pre>

Sergio Cambra - irb(main):001:0> ( 'sergioATprogramatica._see_s'.gsub('_see_', 'e').gsub('AT', '@') )

</pre>