[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Confusing code behavior in Rails

szymon.rozga

6/21/2005 4:38:00 AM

I have a class in /project_dir/lib called Failure. Failure has one
instance variable, t. But, if you call f.<anything> ( f being of type
Failure ), I override method_missing and create a method called
<anything> which returns 10 (it's a simplification of a much bigger
problem).

It works flawlessly, but only once. Under the trend action of my
controller, I instantiate a new instance of Failure. The first time I
load the action and try to display some variable on the view,
everything works. However, if I reload the page, all the instance
variables created on the fly return Nil. And they don't function
properly until I restart Webrick. And then it does the only once thing
again.

Any thoughts ? Or feel free to ask for more details.

4 Answers

acharlieblue

6/21/2005 6:11:00 AM

0


szymon.rozga wrote:
> I have a class in /project_dir/lib called Failure. Failure has one
> instance variable, t. But, if you call f.<anything> ( f being of type
> Failure ), I override method_missing and create a method called
> <anything> which returns 10 (it's a simplification of a much bigger
> problem).
>
> It works flawlessly, but only once. Under the trend action of my
> controller, I instantiate a new instance of Failure. The first time I
> load the action and try to display some variable on the view,
> everything works. However, if I reload the page, all the instance
> variables created on the fly return Nil. And they don't function
> properly until I restart Webrick. And then it does the only once thing
> again.

It sounds like this is what's happening: You're creating these instance
variables and accessor methods in method_missing the first time
through. Then, after the page is done loading, Rails destroys its
world. When you load the page the second time, it re-creates
everything, but the accessor methods are already defined, so it never
falls through to method_missing and you're just accessing empty
instance variables.

szymon.rozga

6/21/2005 6:59:00 AM

0

Thanks for the quick response. I know the user is going to want to
access an array of methods whose name will be determines from the user
input. If I simply create these methods during the initialization of
the object, I should be ok? Or is there a better solution I'm not
considering?

Eric Hodel

6/21/2005 7:56:00 AM

0

On 21 Jun 2005, at 00:00, szymon.rozga wrote:

> Thanks for the quick response. I know the user is going to want to
> access an array of methods whose name will be determines from the user
> input. If I simply create these methods during the initialization of
> the object, I should be ok? Or is there a better solution I'm not
> considering?

You could put this information in the database and wrap it up with a
Model.

--
Eric Hodel - drbrain@segment7.net - http://se...
FEC2 57F1 D465 EB15 5D6E 7C11 332A 551C 796C 9F04



Chris McGrath

6/21/2005 9:35:00 AM

0

Make sure you're using require_dependency rather than require, so
rails knows it needs to reload the file when in development mode.

Cheers,

Chris

On 6/21/05, Charles Steinman <acharlieblue@gmail.com> wrote:
>
> szymon.rozga wrote:
> > I have a class in /project_dir/lib called Failure. Failure has one
> > instance variable, t. But, if you call f.<anything> ( f being of type
> > Failure ), I override method_missing and create a method called
> > <anything> which returns 10 (it's a simplification of a much bigger
> > problem).
> >
> > It works flawlessly, but only once. Under the trend action of my
> > controller, I instantiate a new instance of Failure. The first time I
> > load the action and try to display some variable on the view,
> > everything works. However, if I reload the page, all the instance
> > variables created on the fly return Nil. And they don't function
> > properly until I restart Webrick. And then it does the only once thing
> > again.
>
> It sounds like this is what's happening: You're creating these instance
> variables and accessor methods in method_missing the first time
> through. Then, after the page is done loading, Rails destroys its
> world. When you load the page the second time, it re-creates
> everything, but the accessor methods are already defined, so it never
> falls through to method_missing and you're just accessing empty
> instance variables.
>
>
>