Hi Simon.<div><br></div><div>In your code snippet I want you to think about what it means.</div><div><br></div><div>case</div><div>when @something</div><div> *do something*</div><div>end</div><div><br></div><div>now,</div>
<div>you should look at how case statements should work</div><div><br></div><div>normally</div><div><br></div><div>case something</div><div>when "some value"</div><div> *do something*</div><div>end</div><div><br>
</div><div>In other words;</div><div><ul><li>I want to look at cases of a particular value</li><li>"when its A do this"</li><li>"when its B do this"</li><li>"else do this"</li></ul></div><div>
I didn't think "case()" was defined</div><div>but my guess is that it means "case nil"</div><div><br></div><div>so effectively you're saying;</div><div><br></div><div>"when nil is @question"?</div>
<div>and in the case it fails</div><div>its because @question is exactly nil.</div><div><br></div><div>I dont know the rest of the case statement</div><div>but I suggest you should write some test cases around it.</div><div>
<br></div><div>It seems like you're expecting the "when" to function like an if.</div><div><br><div class="gmail_quote">On 3 August 2011 11:57, Simon Coffey <span dir="ltr"><<a href="mailto:simon@tribesports.com">simon@tribesports.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi LRUG,<br>
<br>
Apologies for posting a bug to the list, but it's weird enough that I<br>
hope it might be interesting (indeed it appears to be logically<br>
impossible). It's got me completely stumped, so any thoughts would be<br>
gratefully received.<br>
<br>
We're getting very occasional (~1 per week) exceptions out of one of<br>
our helper methods in our app (Rails 3.0.3, ruby 1.9.2-p180). For<br>
example, from the following line of code...<br>
<br>
def page_description<br>
case<br>
when @question then @question.background # exception raised here<br>
<snip other cases><br>
end<br>
end<br>
<br>
... we saw "NoMethodError: undefined method `background' for<br>
nil:NilClass". (The full method can be seen here:<br>
<a href="https://gist.github.com/1120170" target="_blank">https://gist.github.com/1120170</a> )<br>
<br>
That's logically impossible, right? @question is clearly nil, as shown<br>
by the exception. But @question is also clearly not nil, otherwise how<br>
on earth would that case fire?<br>
<br>
Other rules in this case statement are also causing exceptions, but<br>
with inexplicable things apparently stored in the instance variables.<br>
For example, we've seen "NoMethodError: undefined method `bio' for<br>
#<Lead:0xdbc31a0>" from line #6 in the gist, despite the @user<br>
instance variable only ever being assigned an instance of User, not<br>
Lead. Another time @user appeared to contain a Hash. Other instance<br>
variables have contained controller instances.<br>
<br>
This only seems to be happening in the #page_description method, which<br>
is used at the top of the <head> section of our layouts. As such, for<br>
any given render pass it will always be the first call to access the<br>
controller instance variables.<br>
<br>
It looks to me like our instance variables are somehow getting<br>
corrupted, but I can't for the life of me see how this would happen.<br>
Unfortunately it happens only on production, and has so far resisted<br>
being reproduced, so we have no ability to get further info out of the<br>
debugger.<br>
<br>
Has anyone seen anything like this before? Undying gratitude / a beer<br>
to anyone who has any bright ideas...<br>
<br>
Cheers,<br>
Simon<br>
<br>
--<br>
Simon Coffey<br>
Developer, Tribesports<br>
<br>
e: <a href="mailto:simon@tribesports.com">simon@tribesports.com</a><br>
m: 07960 004 857<br>
p: Unit 104, Cremer Business Centre, 37 Cremer Street, London, E2 8HD<br>
_______________________________________________<br>
Chat mailing list<br>
<a href="mailto:Chat@lists.lrug.org">Chat@lists.lrug.org</a><br>
<a href="http://lists.lrug.org/listinfo.cgi/chat-lrug.org" target="_blank">http://lists.lrug.org/listinfo.cgi/chat-lrug.org</a><br>
</blockquote></div><br></div>