Silvano S. wrote:
This is a possible plan: I thought to develop a series of custom tags
and behaviours to show in the pages the data coming from the intranet
database. Would you think it could be an easy path to follow for
doing what I have to do?
Thank you in advance for every help,
I’ve done a similar project, displaying live data from an external
database in a site managed by Radiant. Here are some details. (Apologies
in advance to all the Rails/Ruby gurus for any gaffes in this code.)
Here is a behavior to run Ruby code in a Radiant web page:
class RubycodeBehavior < Behavior::Base
tag “evalpart” do |tag|
partname = tag.attr[‘part’] || ‘ruby-code’
t = eval(render_page_part(partname))
Here is a sample page that uses the Rubycode behavior to display Ruby
generated code. It has three parts (tabs), named “body”, “ruby-code”,
and “ruby-code-2”. (The names of the latter two aren’t important, but
‘ruby-code’ is the default name for the <r:evalpart /> tag.)
Contents of the “body” part:
Contents of the “ruby-code” part:
a = “
Contents of the “ruby-code-2” part:
b = “
Hello world 2!
The key is that the code in any ‘eval-ed’ page part must finish up by
putting all its ‘output’ into a single variable that gets returned as
the final step of the code.
Some Rails tips (probably obvious to most).
Use ‘require_dependency’, not ‘require’ to pull shared code into a ruby
code page part. Using ‘require’ will fail (in development mode only?)
when reloading an already displayed page.
Your models need a different database connection from the one set up by
Radiant, without disturbing the Radiant connection. There are various
ways to do this, but here is the method I’m using. Set up an
intermediate class that descends from ActiveRecord::Base, like so:
class Mybase < ActiveRecord::Base
self.abstract_class = true # <-- Important. Done so
# ActiveRecord doesn’t think descendants of Mybase are
# doing single table inheritance.
# put new connection info here …
Then make all your models descend from Mybase.