Communication between objects.

T

Tod

I have been working with Ruby for a few months now and have hit upon
something that I can't find the answer to: what does the code look like
for passing messages back and forth between objects. Here is a specific
example: In a web application (I am not using ROR) I have a CGI object
and an object whose superclass is Active Record. The CGI object
receives some params from POST and makes them available to the Active
Record object. Not surprisingly, the Active Record object does some
work with a database. Here's where I am stumped how do I have the
ActiveRecord Object tell the CGI object that it is done working with
the database and the CGI object may now do something else.

I have made a particularly in-elegant work-around by having the ActRec
object set a global variable to something when it is done and follow
this with a conditional that checks to see if that global variable was
set and if it is then the CGI object can proceed. But there has to be a
more direct way to do this. Also, if I wanted to pass things back and
forth between objects this would not work.

I am sure the examples are out there so I must be looking in the wrong
place or trying to call it something it is not.

Thank you. Tod
 
D

dblack

Hi --

I have been working with Ruby for a few months now and have hit upon
something that I can't find the answer to: what does the code look like
for passing messages back and forth between objects. Here is a specific
example: In a web application (I am not using ROR) I have a CGI object
and an object whose superclass is Active Record. The CGI object
receives some params from POST and makes them available to the Active
Record object. Not surprisingly, the Active Record object does some
work with a database. Here's where I am stumped how do I have the
ActiveRecord Object tell the CGI object that it is done working with
the database and the CGI object may now do something else.

I have made a particularly in-elegant work-around by having the ActRec
object set a global variable to something when it is done and follow
this with a conditional that checks to see if that global variable was
set and if it is then the CGI object can proceed. But there has to be a
more direct way to do this. Also, if I wanted to pass things back and
forth between objects this would not work.

I am sure the examples are out there so I must be looking in the wrong
place or trying to call it something it is not.

I can see what kind of problem you're trying to solve, but in this
case I can't seem to see beyond:

ar_object.do_something
cgi_object.do_something_next

which means I'm not seeing how the program is designed. Can you
elaborate? It might even help to see the global variable version, so
that I can see where in the code the two objects are and why they have
to be aware of each other.


David

--
David A. Black | (e-mail address removed)
Author of "Ruby for Rails" [1] | Ruby/Rails training & consultancy [3]
DABlog (DAB's Weblog) [2] | Co-director, Ruby Central, Inc. [4]
[1] http://www.manning.com/black | [3] http://www.rubypowerandlight.com
[2] http://dablog.rubypal.com | [4] http://www.rubycentral.org
 
T

Tod

I can see what kind of problem you're trying to solve, but in this
case I can't seem to see beyond:

ar_object.do_something
cgi_object.do_something_next

which means I'm not seeing how the program is designed. Can you
elaborate? It might even help to see the global variable version, so
that I can see where in the code the two objects are and why they have
to be aware of each other.


David

Here is the part of the code I am interested in:

require 'cgi'
require 'rubygems'
require_gem 'activerecord'

comment_cgi = CGI.new

@article = comment_cgi['article']
@user = comment_cgi['user']
@comment = comment_cgi['comment']

class Comment < ActiveRecord::Base
after_save :redirect

def redirect
$ok = 'yes'
end
end

new_Comment = Comment.create(
:article_id => @article,
:user_id => @user,
:comment => @comment)

if $ok == 'yes'
comment_cgi.out {"foo"}
else
comment_cgi.out {"problem."}
end

So what I am doing here is "after_save :redirect" is setting the global
variable $ok to "yes" if the Comment object was successful in its
dealings with the database. Then the conditional statement turns
control back over to the CGI object allowing it to proceed (ultimately
with a page redirect).

I know I am reinventing the wheel here because Rails make this kind of
thing so easy but I am avoiding Rails at this point so I can really dig
into the Ruby language and understand it.

Thank you. TOD
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,778
Messages
2,569,605
Members
45,238
Latest member
Top CryptoPodcasts

Latest Threads

Top