There are several softwares which read a database and shows the
tables graphically on the screen (now I`m using Power Architect: 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.
Oh, alright. I guess it’s way past time to get my updates to my
model_graph code (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:
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.
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.
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
You can also try using RrailRoad (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.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.