Report abuse


			
# In views

  def add_employee
    _form_for(@employee,R(AddEmployee))
  end

  def edit_employee
    _form_for(@employee,R(EditEmployee,@employee.id))
  end

  def show_employee
    h1 @employee.name
  end


# In controllers
  module CRUDHelper
    module ClassMethods
      def create_template(model,options={})
        @model = model.to_s
        @record = options[:record] || @model.downcase
        @post_route = options[:post_route]
      end

      attr_reader :model,:record,:post_route
    end

  end

  module AddTemplate

   def get
      instance_variable_set( "@#{self.class.record}",
                             eval(self.class.model).new)
      render "add_#{self.class.model.downcase}"
    end

    def post
      eval(self.class.model).create(input)
      redirect R(eval(self.class.post_route.to_s)) #fix later
    end

    def self.included(base)
      base.extend(CRUDHelper::ClassMethods)
    end

  end

  module EditTemplate

   def get(eid)
      instance_variable_set( "@#{self.class.record}",
                             eval(self.class.model).find(eid))
      render "edit_#{self.class.model.downcase}"
    end

    def post(eid)
      eval(self.class.model).update(eid,input)
      redirect R(eval(self.class.post_route.to_s))
    end

    def self.included(base)
      base.extend(CRUDHelper::ClassMethods)
    end

  end

  class AddEmployee < R '/employee/new'
    include AddTemplate

    create_template(:Employee, :post_route => :Admin)
  end

  class EditEmployee < R '/employee/edit/(\d+)'

    include EditTemplate

    create_template(:Employee, :post_route => :Admin)

  end

  class ShowEmployee < R '/employee/show/(\d+)'
    def get(eid)
      @employee = Employee.find(eid)
      render :show_employee
    end
  end

  class DeleteEmployee < R '/employee/delete/(\d+)'
    def get(eid)
      Employee.delete(eid)
      redirect Admin
    end
  end