tuti plain wrote:
Hi all,
I am new to Rails, and I have a few questions about it. I've done a
few tutorials, up to generating a scaffold using SQLite and inserting
some data.
1. Must I always create my tables using rake db:migrate? Or is it
possible to create a model using an existing table on an already
existing database? Can models be made manually?
Models are just ruby classes, so sure you can just make a model.
However, this is not the approach I would take. Personally, I would not
create a new Rails application from an existing database (unless there
was absolutely no other choice).
Chances are that the existing database is not going to be very Rails
friendly. Instead of using the existing database, I would instead use
the migrations and build a new database from scratch. I would then
create scripts to migrate the existing data into the new schema making
any necessary adjustments to the data to fit a more Rails friendly
database schema.
2. How can I specify table relationships with the generate script? How
about more complex thing like CASCADE DELETE?
You don't do that from generators. Database relations are not really
something that can be predicted correctly by generators. Fortunately,
associations in Rails are pretty straight forward and easy to add to
your model classes.
Rails associations act on the object level. If you want foreign key
constraints at the database level you need to add those to your database
migrations.
3. I am trying to generate a scaffold using mysql, but I get the
folowing error when I run db:migrate:
Mysql::Error: query: not connected: CREATE TABLE `schema_migrations`
(`version`
varchar(255) NOT NULL) ENGINE=InnoDB
(See full trace by running task with --trace)
I have installed the mysql gem, and my database is properly configured
in the config/database.yml file. The catalog specified already exists
on the MySQL server.
I don't know what's wrong here, but my first suggestions would be to
build a new empty rails application using MySQL:
rails my_proj --database mysql
Make sure you're database.yml is configured correctly for your MySQL
installation. Then generate a model. Once that's done run: rake
db:create. If that succeeds then run: rake db:migrate.
If any of that fails try running with the --trace as suggested in the
error you listed. Maybe that will point your in the right direction.