Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## initializers/setup_user_groups.rb
- USER_GROUP_TYPES = %w{group ministry}
- USER_GROUP_SUB_RESOURCES = %w{page user}
- ## routes.rb (excerpt)
- USER_GROUP_TYPES.each do |resource_type|
- map.resources resource_type.pluralize, :controller => 'user_groups' do |groups|
- USER_GROUP_SUB_RESOURCES.each do |subresource|
- groups.resources subresource.pluralize
- end
- end
- end
- ## application_controller.rb (excerpt)
- before_filter :fix_user_group_sub_resources
- private
- def fix_user_group_sub_resources
- USER_GROUP_TYPES.map{|t|"#{t}_id".to_sym}.each do |resource_id|
- params[:user_group_id] ||= params.delete(resource_id)
- end
- end
- ## user_groups_controller.rb (excerpt)
- class UserGroupsController < ApplicationController
- def index
- @user_groups = UserGroup.all(:conditions => ['group_type = ?', extract_group_type_from_url])
- end
- def new
- @user_group = UserGroup.new(:group_type => extract_group_type_from_url)
- end
- def create
- @user_group = UserGroup.new(params[:user_group].merge(:group_type => extract_group_type_from_url))
- #...standard save stuff...
- end
- protected
- def extract_groups_type_from_url
- routes = ActionController::Routing::Routes.routes_for_controller_and_action_and_keys(controller_name, 'index', nil)
- segments = ActionController::Routing::Routes.to_plain_segments(request.path)
- route_segments = routes.map do |route|
- route.segments.select{|s|s.respond_to?('value')}.map{|s|s.value}
- end.flatten
- (route_segments & segments).first
- end
- def extract_group_type_from_url
- extract_groups_type_from_url.singularize
- end
- helper_method :extract_groups_type_from_url, :extract_group_type_from_url
- end
- ## user_groups_helper.rb
- module UserGroupsHelper
- def user_groups_url
- send("#{extract_groups_type_from_url}_url")
- end
- def user_groups_path
- send("#{extract_groups_type_from_url}_path")
- end
- def user_group_path(user_group)
- send("#{user_group.group_type}_path", user_group)
- end
- def edit_user_group_path(user_group)
- send("edit_#{user_group.group_type}_path", user_group)
- end
- def new_user_group_path
- send("new_#{extract_group_type_from_url}_path")
- end
- USER_GROUP_SUB_RESOURCES.each do |sub_resource_type|
- define_method("user_group_#{sub_resource_type.pluralize}_path") do |parent_resource|
- send("#{parent_resource.group_type}_#{sub_resource_type.pluralize}_path", parent_resource)
- end
- define_method("user_group_#{sub_resource_type}_path") do |parent_resource, sub_resource|
- send("#{parent_resource.group_type}_#{sub_resource_type}_path", parent_resource, sub_resource)
- end
- define_method("edit_user_group_#{sub_resource_type}_path") do |parent_resource, sub_resource|
- send("edit_#{parent_resource.group_type}_#{sub_resource_type}_path", parent_resource, sub_resource)
- end
- define_method("new_user_group_#{sub_resource_type}_path") do |parent_resource|
- send("new_#{parent_resource.group_type}_#{sub_resource_type}_path", parent_resource)
- end
- end
- end
Add Comment
Please, Sign In to add comment