Currently, this gem is compatible with ActiveScaffold >= 3.3.x gems and rails >= 4.0.
Use 1.0.x for rails >= 3.x versions.
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.
You’ll need at least ActiveScaffold 3.3.x to use this, and rails 3.x
gem install active_scaffold_duplicate
Override initialize_dup in the model to set some attributes or copy associations:
# 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
Add duplicate action.
class BillsController < ApplicationController active_scaffold do |conf| conf.actions << :duplicate end end
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.
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
Also you can change it globally.
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
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:
conf.duplicate.refresh_list = true conf.duplicate.action_after_clone = :edit
It’s possible to define some methods to add some custom code which require access to session or request params:
- For :post method, before_duplicate_save(record) and after_duplicate_save(record) can be defined, which will be called before and after saving the record respectively.
- For :new method, before_duplicate_new(record) can be defined, which will be called before rendering.
If you have issues installing the gem, search / post to the Active Scaffold forum or Create an issue
Fork, hack, push, and request a pull:
http://github.com/activescaffold/active_scaffold_duplicate/
Released under the MIT license (included).
Contact me:
Sergio Cambra – irb(main):001:0> ( ‘sergioATprogramatica._see_s’.gsub(‘see’, ‘e’).gsub(‘AT’, ‘@’) )