Search code examples
ruby-on-railspostgresqlrails-postgresql

DB migrate scripts break on references


I've been following online examples of how to create tables the Rails way and I noticed the migration scripts I created containing references don't work out of the box. I thought maybe I did something wrong so I tried just now making a test application/migration against a SQLite3 datasource. I ran the following commands:

$ rails g scaffold SchoolClass name
$ rails g scaffold Student name SchoolClass:references

And it made my migration scripts (along with everything else).

Migration script for dependent table with reference to Model

I ran the SQLite3 migration scripts and it worked fine.

When I tried doing the same steps above against a Postgres datasource, I kept on getting the following:

PG::UndefinedTable: ERROR: relation does not exist

The only way I got past this issue is if I went into the migration script and updated the t.references line and replaced the class name with the actual table name. In the Rails migration guide (http://guides.rubyonrails.org/v2.3/migrations.html#special-helpers) it said for the references helper you pass the Model name. In the case with Postgres, this seems not to be the case.

It's a simple enough fix to replace Model names with table names, but I've got a ton of tables to migrate and each table can have a good number of references. Has anyone seen this before, and is there some way to keep on using the scaffold utility to make migrations?

Appreciative of any useful assistance,

  • Joe

Solution

  • It should be t.references :school_class instead of :SchoolClass And correct scaffold command is rails g scaffold Student name school_class:references. See rails guides on naming conventions