# Generating Class Diagram from Models

**URL:** <https://www.ruby-forum.com/t/generating-class-diagram-from-models/153826>\
**Category:** Rails\
**Created:** [November 21, 2008, 3:32pm UTC](https://www.ruby-forum.com/t/generating-class-diagram-from-models/153826 "2008-11-21T15:32:45Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![tlianza](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ce7236/32.png) [@tlianza](https://www.ruby-forum.com/u/tlianza)\
**Post date:** [November 21, 2008, 3:32pm UTC](https://www.ruby-forum.com/t/generating-class-diagram-from-models/153826/1 "2008-11-21T15:32:45Z")

</div>

Hi all!

There are several softwares which read a database and shows the  
tables graphically on the screen (now I`m using Power Architect:  
[SQL Power Architect – Data Modeling](http://www.sqlpower.ca/page/architect)). Is there something which  
beyond to read the tables, can understand the relationship beetween it  
from app/models files? I say, has\_many, belongs\_to, etc…

Ok, I could use Power Architect to read the tables and make the arrows  
by hand, but in a constant growing project, it is not a good way.

Thank You  
Tom L.

---

<div class="post-metadata">

**Author:** ![tlianza](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ce7236/32.png) [@tlianza](https://www.ruby-forum.com/u/tlianza)\
**Post date:** [November 21, 2008, 4:52pm UTC](https://www.ruby-forum.com/t/generating-class-diagram-from-models/153826/2 "2008-11-21T16:52:34Z")

</div>

Hi Tom,

You read my mind, I just was about to post identical question… when  
I stumped upon some complicated models legacy models today.

Is there something like that out there?

H.

---

<div class="post-metadata">

**Author:** ![tlianza](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ce7236/32.png) [@tlianza](https://www.ruby-forum.com/u/tlianza)\
**Post date:** [November 21, 2008, 5:20pm UTC](https://www.ruby-forum.com/t/generating-class-diagram-from-models/153826/3 "2008-11-21T17:20:44Z")

</div>

Oh, alright. I guess it’s way past time to get my updates to my  
model\_graph code ([http://rubyforge.org/projects/model-graph/](http://rubyforge.org/projects/model-graph/)) packaged  
up and posted. This reflects on the AR associations and builds a DOT  
file that can be visualized with, e.g., Graphviz. (From there you can  
export as PNG, PDF, etc.)

-Rob

On Nov 21, 2008, at 10:51 AM, Hubert ÅÄ™picki wrote:

> On 21 Lis, 15:31, Tom L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > arrows  
> > by hand, but in a constant growing project, it is not a good way.
> > 
> > Thank You  
> > Tom L.

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid  
+1 513-295-4739  
Skype: rob.biedenharn

---

<div class="post-metadata">

**Author:** ![tlianza](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ce7236/32.png) [@tlianza](https://www.ruby-forum.com/u/tlianza)\
**Post date:** [November 21, 2008, 6:12pm UTC](https://www.ruby-forum.com/t/generating-class-diagram-from-models/153826/4 "2008-11-21T18:12:58Z")

</div>

Thanks Rob!

That is great script, I didn’t use Graphviz before so this was more  
trouble than installing yor gem ;).

However, not sure if it’s my fault - or library works like that,  
generated graph was hard to read and analyze, it also didn’t include  
model attributes.

Googling for “ruby graphviz” was more successful:  
[http://visualizemodels.rubyforge.org/](http://visualizemodels.rubyforge.org/)

Is really nice plugin, generates cool graphs. I just had to make  
little fix for Rails 2.2 to work, but it’s easy.

Best,  
H.

---

<div class="post-metadata">

**Author:** ![tlianza](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ce7236/32.png) [@tlianza](https://www.ruby-forum.com/u/tlianza)\
**Post date:** [November 21, 2008, 7:02pm UTC](https://www.ruby-forum.com/t/generating-class-diagram-from-models/153826/5 "2008-11-21T19:02:47Z")

</div>

model\_graph doesn’t do the attributes on purpose. My need was to  
avoid redrawing the associations at a time on a particular project  
where they were driving me a bit crazy. The use of decorated edges to  
denote the kind of association is one thing that I didn’t find  
elsewhere.

If you download the test file (or find it in the gem directory, I think)  
[http://model-graph.rubyforge.org/svn/model\_graph\_test.dot](http://model-graph.rubyforge.org/svn/model_graph_test.dot)

and open it with Graphviz, you see the edge types that mean:

```
     class A < ActiveRecord::Base # :nodoc:
       has_many :bs
       has_one :c
     end
     class B < ActiveRecord::Base # :nodoc:
       belongs_to :a
     end
     class C < ActiveRecord::Base # :nodoc:
       belongs_to :a
     end
     class One < ActiveRecord::Base # :nodoc:
       has_and_belongs_to_many :twos
     end
     class Two < ActiveRecord::Base # :nodoc:
       has_and_belongs_to_many :ones
     end
     class Alpha < ActiveRecord::Base # :nodoc:
       has_many :betas
       has_many :gammas, :through => :betas
     end
     class Beta < ActiveRecord::Base # :nodoc:
       belongs_to :alpha
       belongs_to :gamma
     end
     class Gamma < ActiveRecord::Base # :nodoc:
       has_many :betas
       has_many :alphas, :through => :betas
     end
     class Selfish < ActiveRecord::Base # :nodoc:
       has_many :selfishes, :foreign_key => :solo_id
     end

```

So a brief legend (in ASCII) would be:

-| belongs\_to  
-|o has\_one  
-o\< has\_many  
dotted edge =\> has\_many :through  
-o\<\<\>\>o- has\_and\_belongs\_to\_many  
(where \<\> is a small, unlabeled, diamond-shaped node)

Please do forward your fix for Rails 2.2!

Glad it helps a bit,

-Rob

On Nov 21, 2008, at 12:12 PM, Hubert ÅÄ™picki wrote:

> Googling for “ruby graphviz” was more successful:
> 
> > model\_graph code ([http://rubyforge.org/projects/model-graph/](http://rubyforge.org/projects/model-graph/))
> > 
> > > Hi Tom,
> > > 
> > > > Hi all!  
> > > > by hand, but in a constant growing project, it is not a good way.
> > 
> > > > Thank You  
> > > > Tom L.

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![tlianza](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ce7236/32.png) [@tlianza](https://www.ruby-forum.com/u/tlianza)\
**Post date:** [November 22, 2008, 3:51pm UTC](https://www.ruby-forum.com/t/generating-class-diagram-from-models/153826/6 "2008-11-22T15:51:55Z")

</div>

You can also try using RrailRoad ([http://railroad.rubyforge.org/](http://railroad.rubyforge.org/)). I  
find it pretty simple and neat. Note: It does not pick belongs\_to  
relationships and uses the has\_many from the other direction for  
figuring out relationships.
