Sha256: 6ba702ad8bbe942445ec09cdeae6dae3fcf80815d4cdb0ce421015915c9406c3

Contents?: true

Size: 1.11 KB

Versions: 2

Compression:

Stored size: 1.11 KB

Contents

class AddManyRolesStrategy < ActiveRecord::Migration
  class << self

    def up          
      create_roles
      create_user_roles
      add_index :roles, :name, :unique => true      
      
      insert_roles
    end

    def down      
      drop_roles
      drop_user_roles
      
      remove_index :roles, :name      
    end

    protected

    def create_user_roles
      create_table :<%= table_name.singularize %>_roles do |t|
        t.integer :<%= table_name.singularize %>_id
        t.integer :role_id
        t.timestamps
      end
      
      add_index :<%= table_name.singularize %>_roles, [:<%= table_name.singularize %>_id, :role_id], :unique => true  
    end

    def drop_user_roles
      drop_table :<%= table_name.singularize %>_roles
    end


    def create_roles
      create_table :roles do |t|
        t.string  :name
        t.timestamps
      end
    end

    def drop_roles
      drop_table :roles
    end
    
    def insert_roles
      <%- roles_to_add.each do |role| -%>
        begin
          Role.create(:name => '<%= role %>')
        rescue
        end
      <%- end -%>
    end    
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
roles_active_record-0.5.1 lib/generators/active_record/roles_migration/templates/add_many_roles_strategy.erb
roles_active_record-0.5.0 lib/generators/active_record/roles_migration/templates/add_many_roles_strategy.erb