Class variables different between spec and runtime?

Hello Folks,

This gist user.rb · GitHub has an example user.rb,
user_spec.rb
At runtime, this snippet fails

u = User.find(123)
u.update_with_profile({…})
The error occurred while evaluating nil.select):
app/models/user.rb:6:in moderator_fields' app/models/user.rb:118:in update_with_profile’

The spec passes all-green.

Could you tell me how this might be ?

Thanks,

Peter F.
(847) 687-7646
Email: [email protected]
IM GTalk: peter.fitzgibbons
IM AOL: [email protected]

On Tue, Dec 22, 2009 at 9:14 AM, Peter F. <
[email protected]> wrote:

app/models/user.rb:118:in `update_with_profile’

The spec passes all-green.

Could you tell me how this might be ?

The user in the spec comes from new_with_profile(), which sets instance
variables on the User class.

The user in the console comes from find(), and those ivars are not yet
set.

On Tue, Dec 22, 2009 at 9:22 AM, David C.
[email protected]wrote:

The user in the spec comes from new_with_profile(), which sets instance
variables on the User class.

The user in the console comes from find(), and those ivars are not yet set.

Also - @params in the User class (in the class methods) is not the same
@params in the User instances (in update_with_profile).

HTH,
David

On Tue, Dec 22, 2009 at 9:30 AM, Rick DeNatale
[email protected]wrote:

Also counting on class variables to retain state in Rails is a recipe
for disaster.

Did you read that in rails recipes?

:-/

On Tue, Dec 22, 2009 at 10:24 AM, David C. [email protected]
wrote:

The spec passes all-green.
HTH,
David

Also counting on class variables to retain state in Rails is a recipe
for disaster.


Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Twitter: http://twitter.com/RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: Rick DeNatale - Developer - IBM | LinkedIn

DOH!
Thanks David,

Happy Holidays!

Peter F.
(847) 687-7646
Email: [email protected]
IM GTalk: peter.fitzgibbons
IM AOL: [email protected]

On Mon, Dec 28, 2009 at 12:18 AM, Andrew P. [email protected]
wrote:

2009/12/22 Rick DeNatale [email protected]

Please explain why - thanks.

Because, classes and class variables aren’t guaranteed to be persistent.

In development mode, classes can get reloaded, which wipes out class
(and class instance) variables.

In most deployment scenarios requests from a single user might be
handled by different processes, each with it’s own state.

State that needs to be around between requests needs to be somewhere
persistent like the DB, or the session.


Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Twitter: http://twitter.com/RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: Rick DeNatale - Developer - IBM | LinkedIn

2009/12/22 Rick DeNatale [email protected]

app/models/user.rb:118:in `update_with_profile’
Also - @params in the User class (in the class methods) is not the same
@params in the User instances (in update_with_profile).
HTH,
David

Also counting on class variables to retain state in Rails is a recipe
for disaster.

Please explain why - thanks.

Andrew