Confusing code behavior in Rails

S

szymon.rozga

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

Charles Steinman

szymon.rozga said:
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.
 
S

szymon.rozga

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

Eric Hodel

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

Chris McGrath

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
 

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,755
Messages
2,569,537
Members
45,023
Latest member
websitedesig25

Latest Threads

Top