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,
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