Migrations in plugin

Hi!    I have to move a complete model and its migration into a plugin. I know how can I do that for a model but what about the migration???

Regards, Mohsin

restful_authentication does something similar using a rake task and an erb template. If you're not already using it, you might want to install it just to see how they've solved the problem.

restful_authentication does something similar using a rake task and an erb template. If you're not already using it, you might want to install it just to see how they've solved the problem.

I've looked into it and its not yet clear to me. Actually, I only need to create a single table when my plugin is installed. No more. Should I do it manually in install.rb and uninstall.rb?

MohsinHijazee wrote:

restful_authentication does something similar using a rake task and an erb template. If you're not already using it, you might want to install it just to see how they've solved the problem.

I've looked into it and its not yet clear to me. Actually, I only need to create a single table when my plugin is installed. No more. Should I do it manually in install.rb and uninstall.rb?

It seems the Rails generator library has a migration method. The relevant code in restful authentication can be found at line 179 of "authenticated_generator.rb":

      unless options[:skip_migration]         m.migration_template 'migration.rb', 'db/migrate', :assigns => {           :migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}"         }, :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}"       end

There is obviously a lot here you won't need. You will also find a file called migration.rb in the templates directory, which get interpreted and copied across.

Mind you - I have never built a template for a migration before, so don't follow me :slight_smile:

MohsinHijazee wrote: >> restful_authentication does something similar using a rake task and an >> erb template. If you're not already using it, you might want to >> install it just to see how they've solved the problem. > I've looked into it and its not yet clear to me. Actually, I only need > to create a single table when my plugin is installed. No more. Should > I do it manually in install.rb and uninstall.rb?

It seems the Rails generator library has a migration method. The relevant code in restful authentication can be found at line 179 of "authenticated_generator.rb":

      unless options[:skip_migration]         m.migration_template 'migration.rb', 'db/migrate', :assigns => {           :migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}"         }, :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}"       end

There is obviously a lot here you won't need. You will also find a file called migration.rb in the templates directory, which get interpreted and copied across.

Mind you - I have never built a template for a migration before, so don't follow me :slight_smile:

So in a nutshell, there is no smart way of packing a migration with an application. Like if its a zip code plugin, the it would require to create a table called zipcodes and would need to populate it. What if we do it in install.rb and uninstall.rb? How do we do that?

engines does some 'engines migrations'