# 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