I’m a PHP programmer for over a decade and making the move to RoR. Here is what I’m used to from the PHP world:
-
Create DB schema in a tool like MySQL WorkBench — and make fields precisely the size I want without wasting space (e.g. varchar(15) if it’s ip_address).
-
Write models using Datamapper and place those exact field lengths and specifications in there so my app doesn’t try to put in any larger values.
In the RoR world from what I’ve seen over the past two days, this seems to be the flow suggested:
-
Add fields / schema using the command line which creates a migration script and apparently created large ass fields (e.g. “ip_address string” is probably making the field varchar(255) in the db when I run the migration).
-
Put in validations during model creation.
Am I missing something here? What’s the process in the RoR world for enterprise level applications where you actually want to create a highly customized schema? Do I manually write out migration scripts?
The scaffolding is what you use to get started quickly. But before running the migration, you can edit it and add constraints and specific column lengths.
Validations specified in the model (in the ruby code) does not carry the same level of security as validations /constraints specified on the database. So you still need to define those on the database.
While it is possible to work with Rails without migrations, I would strongly advice against it. In some cases it cannot be avoided (when working with legacy databases for instance).
The biggest advantage of using the migrations is that your database schema, accross different platforms, can be held in sync through different stages. E.g. your development and your production database. When deploying your code, the migrations will take care that the database is migrated correctly.