[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Communication between objects.

Tod

9/19/2006 11:08:00 AM

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

4 Answers

Paul Lutus

9/19/2006 11:33:00 AM

0

Tod wrote:

/ ...

> 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.

Create a superclass that both objects inherit, and have the superclass take
responsibility for communication between objects.

--
Paul Lutus
http://www.ara...

dblack

9/19/2006 2:34:00 PM

0

Tod

9/19/2006 3:41:00 PM

0


dblack@wobblini.net wrote:

>
> 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

Trans

9/21/2006 2:07:00 AM

0

Observable Pattern?