# Class variables different between spec and runtime?

**URL:** <https://www.ruby-forum.com/t/class-variables-different-between-spec-and-runtime/180599>\
**Category:** RSpec\
**Created:** [December 22, 2009, 4:15pm UTC](https://www.ruby-forum.com/t/class-variables-different-between-spec-and-runtime/180599 "2009-12-22T16:15:46Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![churp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f14d63/32.png) [@churp](https://www.ruby-forum.com/u/churp)\
**Post date:** [December 22, 2009, 4:15pm UTC](https://www.ruby-forum.com/t/class-variables-different-between-spec-and-runtime/180599/1 "2009-12-22T16:15:46Z")

</div>

Hello Folks,

This gist [user.rb · GitHub](http://gist.github.com/261791) 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: removed\_email\_address@domain.invalid  
IM GTalk: peter.fitzgibbons  
IM AOL: removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![churp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f14d63/32.png) [@churp](https://www.ruby-forum.com/u/churp)\
**Post date:** [December 22, 2009, 4:25pm UTC](https://www.ruby-forum.com/t/class-variables-different-between-spec-and-runtime/180599/2 "2009-12-22T16:25:08Z")

</div>

On Tue, Dec 22, 2009 at 9:14 AM, Peter F. \<  
removed\_email\_address@domain.invalid\> 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.

---

<div class="post-metadata">

**Author:** ![churp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f14d63/32.png) [@churp](https://www.ruby-forum.com/u/churp)\
**Post date:** [December 22, 2009, 4:26pm UTC](https://www.ruby-forum.com/t/class-variables-different-between-spec-and-runtime/180599/3 "2009-12-22T16:26:19Z")

</div>

On Tue, Dec 22, 2009 at 9:22 AM, David C.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)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

---

<div class="post-metadata">

**Author:** ![churp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f14d63/32.png) [@churp](https://www.ruby-forum.com/u/churp)\
**Post date:** [December 22, 2009, 4:38pm UTC](https://www.ruby-forum.com/t/class-variables-different-between-spec-and-runtime/180599/4 "2009-12-22T16:38:02Z")

</div>

On Tue, Dec 22, 2009 at 9:30 AM, Rick DeNatale  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)wrote:

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

Did you read that in rails recipes?

:-/

---

<div class="post-metadata">

**Author:** ![churp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f14d63/32.png) [@churp](https://www.ruby-forum.com/u/churp)\
**Post date:** [December 22, 2009, 4:32pm UTC](https://www.ruby-forum.com/t/class-variables-different-between-spec-and-runtime/180599/5 "2009-12-22T16:32:45Z")

</div>

On Tue, Dec 22, 2009 at 10:24 AM, David C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
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/](http://talklikeaduck.denhaven2.com/)  
Twitter: [http://twitter.com/RickDeNatale](http://twitter.com/RickDeNatale)  
WWR: [http://www.workingwithrails.com/person/9021-rick-denatale](http://www.workingwithrails.com/person/9021-rick-denatale)  
LinkedIn: [Rick DeNatale - Developer - IBM | LinkedIn](http://www.linkedin.com/in/rickdenatale)

---

<div class="post-metadata">

**Author:** ![churp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f14d63/32.png) [@churp](https://www.ruby-forum.com/u/churp)\
**Post date:** [December 22, 2009, 7:53pm UTC](https://www.ruby-forum.com/t/class-variables-different-between-spec-and-runtime/180599/6 "2009-12-22T19:53:31Z")

</div>

DOH!  
Thanks David,

Happy Holidays!

Peter F.  
(847) 687-7646  
Email: removed\_email\_address@domain.invalid  
IM GTalk: peter.fitzgibbons  
IM AOL: removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![churp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f14d63/32.png) [@churp](https://www.ruby-forum.com/u/churp)\
**Post date:** [December 28, 2009, 2:27pm UTC](https://www.ruby-forum.com/t/class-variables-different-between-spec-and-runtime/180599/7 "2009-12-28T14:27:03Z")

</div>

On Mon, Dec 28, 2009 at 12:18 AM, Andrew P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> 2009/12/22 Rick DeNatale [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> 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/](http://talklikeaduck.denhaven2.com/)  
Twitter: [http://twitter.com/RickDeNatale](http://twitter.com/RickDeNatale)  
WWR: [http://www.workingwithrails.com/person/9021-rick-denatale](http://www.workingwithrails.com/person/9021-rick-denatale)  
LinkedIn: [Rick DeNatale - Developer - IBM | LinkedIn](http://www.linkedin.com/in/rickdenatale)

---

<div class="post-metadata">

**Author:** ![churp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f14d63/32.png) [@churp](https://www.ruby-forum.com/u/churp)\
**Post date:** [December 28, 2009, 6:20am UTC](https://www.ruby-forum.com/t/class-variables-different-between-spec-and-runtime/180599/8 "2009-12-28T06:20:04Z")

</div>

2009/12/22 Rick DeNatale [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

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