In Rolling with Ruby on Rails tutorial - http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html - I saw that to
introduce a new element to my domain, I needed to define it in a table,
generate a model element with a similar name and the class would
autoamtically take the attributes from the table definition. Is it
possible to do this in the other direction… i.e to take the class
diagram and automatically generate the table definition. Would this be
something build into Rails, or require a 3rd party tool?
My intention is to use RSA to define my domain model, export the classes
to Ruby and use this to drive the scaffolding set up in Rails.
If you have any direct experince with this or can point me to other
tutorials, it would be much appreciated!
Rails, specifically ActiveRecord [the ‘Model’ in MVC], serves the very
specific role of object-relational mapping and as a result the entire
framework [currently] is very database centric [as intended by its
author]… I came from an RSA [of course it was called rose back then]
world and a similar experience that it seems youre having when being
introduced to rails. What you need to look into is ‘Migrations’:
This essentially allows you to describe your database tables/handle the
management and migration of them in pure ruby [as opposed to SQL] - you
still have to describe their relationships in the Model classes that you
generate as a result of the table generation.
Unfortunatly RSA [and arguably UML] won’t do you much good other than
perhaps a UML-esque diagram of your model [which could be invaluable if
things get complex] - the most popular UML concepts exist in database
design as well, c.f. aggregation and has_many, etc. As you’ll find
modeling data is fundamentally similar regardless of what abstract lingo
you choose to author it in…
Theres also a difference of culture at play [I’m assuming] RSA, and all
the tools in the Rational Unified Process are very concerned with
process, documentation, etc. Rails is a framework geared toward Agile
development, which is generally not concerned with formal processes, nor
detailed documentation like a sequence diagram, et al. i.e. youre
mixing apples and oranges…
Jamie wrote:
In Rolling with Ruby on Rails tutorial - Radar – O’Reilly - I saw that to
introduce a new element to my domain, I needed to define it in a table,
generate a model element with a similar name and the class would
autoamtically take the attributes from the table definition. Is it
possible to do this in the other direction… i.e to take the class
diagram and automatically generate the table definition. Would this be
something build into Rails, or require a 3rd party tool?
My intention is to use RSA to define my domain model, export the classes
to Ruby and use this to drive the scaffolding set up in Rails.
If you have any direct experince with this or can point me to other
tutorials, it would be much appreciated!
Thank you very much for your response. I do plan on using the Agile
methodology, rather than RUP, but am using UML as a notation at my
disposal to define the domain model. Irrespective of methodology this
is an essential artifact and I believe describing the domain model is
easier using a class diagram than an ERD. Though both will work.
Perhaps I should look towards object-relational mapping tools, so that I
can convert from XMI to SQL and then bring it into Ruby through the
database route?
My recollection of the entirety of the Rose/RSA toolset is fuzzy,
but I do remember it being tricky to model dynamic stuff.
Migrations in Rails are inherently dynamic, you build in extra
migrations to expand your DB schema as your entities/models
grow and evolve. I dont know if RSA models this very well.
I have heard that Nitro/OG is setup in this fashion. Haven’t tried
it first hand though, so not sure how valuable it may be.
-NSHB
Nitro/Og is setup this way. With Og as the ORM you just define
normal ruby classes. Then you use attr_accessor and friends which Og
overides to add persistence to the db transparently. Its really quite
slick. I would encourage anyone using rails to also check out Nitro.
Its a bit different but its very nice in its own way.
-Ezra
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.