# Strange behaviour

**URL:** <https://www.ruby-forum.com/t/strange-behaviour/153454>\
**Category:** Rails\
**Created:** [November 17, 2008, 2:16pm UTC](https://www.ruby-forum.com/t/strange-behaviour/153454 "2008-11-17T14:16:36Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![sigvei](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ac8455/32.png) [@sigvei](https://www.ruby-forum.com/u/sigvei)\
**Post date:** [November 17, 2008, 2:16pm UTC](https://www.ruby-forum.com/t/strange-behaviour/153454/1 "2008-11-17T14:16:36Z")

</div>

I have the following relationships:

Document :has\_many Proposals :has\_many ProposalVersions.

This fails:

> > Document.first.proposals.first.proposal\_versions.size  
> > =\> 0

But this works:

> > Proposal.find(1).proposal\_versions.size  
> > =\> 2

Here’s the SQL from the first statement:

SELECT count(\*) AS count\_all FROM “proposal\_versions” WHERE  
(“proposal\_versions”.proposal\_id = 2)

The failing SQL in the first example seems really dangerous, because  
it apparently picks an ID at random (and this obviously works also  
with non-count queries, resulting in possibly returning the wrong set  
of data:

Where does the ‘2’ come from? Neither Document or Proposal has ID 2,  
they’re both ID 1.

Is this expected behaviour?

I’m on rails 2.2.1 (eh, 2.2 RC2). Linux. SQlite.

---

<div class="post-metadata">

**Author:** ![sigvei](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ac8455/32.png) [@sigvei](https://www.ruby-forum.com/u/sigvei)\
**Post date:** [November 17, 2008, 2:39pm UTC](https://www.ruby-forum.com/t/strange-behaviour/153454/2 "2008-11-17T14:39:04Z")

</div>

On Nov 17, 11:56 pm, sigvei [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> I have the following relationships:
> 
> Document :has\_many Proposals :has\_many ProposalVersions.
> 
> This fails:\>\> Document.first.proposals.first.proposal\_versions.size

Do you mean Document.find(:first)… ?

> (“proposal\_versions”.proposal\_id = 2)
> 
> I’m on rails 2.2.1 (eh, 2.2 RC2). Linux. SQlite.

– Daniel B.

---

<div class="post-metadata">

**Author:** ![sigvei](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ac8455/32.png) [@sigvei](https://www.ruby-forum.com/u/sigvei)\
**Post date:** [November 17, 2008, 3:20pm UTC](https://www.ruby-forum.com/t/strange-behaviour/153454/3 "2008-11-17T15:20:55Z")

</div>

On 17 Nov, 14:38, Daniel B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> On Nov 17, 11:56 pm, sigvei [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > I have the following relationships:
> 
> > Document :has\_many Proposals :has\_many ProposalVersions.
> 
> > This fails:\>\> Document.first.proposals.first.proposal\_versions.size
> 
> Do you mean Document.find(:first)… ?

ActiveRecord::Base::first is a convenience wrapper for  
ActiveRecord::Base::find(:first), according to the API. So I can’t  
quite see why that should make a difference.

---

<div class="post-metadata">

**Author:** ![sigvei](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ac8455/32.png) [@sigvei](https://www.ruby-forum.com/u/sigvei)\
**Post date:** [November 17, 2008, 3:49pm UTC](https://www.ruby-forum.com/t/strange-behaviour/153454/4 "2008-11-17T15:49:09Z")

</div>

On Nov 18, 1:19 am, sigvei [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > Do you mean Document.find(:first)… ?
> 
> ActiveRecord::Base::first is a convenience wrapper for  
> ActiveRecord::Base::find(:first), according to the API. So I can’t  
> quite see why that should make a difference.

Sorry. Wasn’t familiar with it. Hard to imagine rails putting in a  
random id.  
Can only surmise that  
Document.first.proposals.first.id==2  
I don’t think any order is guaranteed either unless you’ve  
specified :order somewhere so it may change randomly depending on your  
database. Maybe you added a new proposal with no proposal versions in  
addition to proposal with id=1. Or a new document even.

–  
Daniel B.

---

<div class="post-metadata">

**Author:** ![sigvei](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ac8455/32.png) [@sigvei](https://www.ruby-forum.com/u/sigvei)\
**Post date:** [November 17, 2008, 3:37pm UTC](https://www.ruby-forum.com/t/strange-behaviour/153454/5 "2008-11-17T15:37:59Z")

</div>

On 17 Nov 2008, at 14:19, sigvei wrote:

> > Do you mean Document.find(:first)… ?
> 
> ActiveRecord::Base::first is a convenience wrapper for  
> ActiveRecord::Base::find(:first), according to the API. So I can’t  
> quite see why that should make a difference.

is there a document/proposal with id=2 (you’ve sort of implied that  
there isn’t, but I’m not quite sure)

Fred
