# Active Record Relationships

**URL:** <https://www.ruby-forum.com/t/active-record-relationships/84140>\
**Category:** Rails\
**Created:** [February 1, 2007, 8:43pm UTC](https://www.ruby-forum.com/t/active-record-relationships/84140 "2007-02-01T20:43:59Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![ideawire\_bb](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/96bed5/32.png) [@ideawire\_bb](https://www.ruby-forum.com/u/ideawire_bb)\
**Post date:** [February 1, 2007, 8:43pm UTC](https://www.ruby-forum.com/t/active-record-relationships/84140/1 "2007-02-01T20:43:59Z")

</div>

Hello.

I am able to get my setup working within the Rails console, but not  
within Rails.

# memberships

id (PK)  
…

# dividends

id (PK)  
membership\_id (FK)  
…

Note: I originally had memberships\_id, but this did not work correctly.

membership.rb  
has\_one :dividend

dividend.rb  
belongs\_to :membership

I am trying to loop through the memberships table, printing a mix of  
information from this table and from the dividends table.

My console session below shows that I have the relationships setup  
properly.

# ruby script/console

# \>\> member = Membership.find(1)

# \>\> member.first\_name

“Michael”  
#\>\> member.dividend.broker\_name  
“E-Trade”

Great, now for the portion of my view in rails that is causing the  
error.

\<%= membership.id %\> \<%= membership.first\_name %\> \<%= membership.dividend.broker\_name || "Not Entered" %\>

If I remove the third line (membership.dividend.broker\_name), it will  
find anything in the memberships table, but crashes if I try to display  
anything from the dividend table.

The log file identifies the specific query that is causing a problem.  
There is a record in the memberships table (probably quite a few) that  
DO NOT have a corresponding record in the dividend table. I figured the  
( || “Not Entered”) would suffice, but I’m still getting a nasty  
“NoMethodError”.

You have a nil object when you didn’t expect it!  
The error occurred while evaluating nil.broker\_name

Do I have this setup correctly? Can active record handle the  
relationship if corresponding rows don’t exist in the child table?

Thanks for reading and any possible suggestions toward resolution.

-Brenden

---

<div class="post-metadata">

**Author:** ![ideawire\_bb](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/96bed5/32.png) [@ideawire\_bb](https://www.ruby-forum.com/u/ideawire_bb)\
**Post date:** [February 1, 2007, 8:54pm UTC](https://www.ruby-forum.com/t/active-record-relationships/84140/2 "2007-02-01T20:54:57Z")

</div>

> Do I have this setup correctly? Can active record handle the  
> relationship if corresponding rows don’t exist in the child table?  
> You have got the relationship set up correctly. However,  
> member.dividend will only return the associated dividend object if one  
> exists. If one does not exist, it will return nil. Therefore, you  
> get the error because you’re trying to call ‘broker\_name’ on a nil  
> object.

Basically, you need to add a bit more logic:

\<% if membership.dividend %\>  
\<%= member.dividend.broker\_name %\>  
\<% else %\>  
Not Entered  
\<% end %\>

There is probably a way to make this a bit neater for your views, but  
hopefully this’ll help you on your way.

Steve

---

<div class="post-metadata">

**Author:** ![ideawire\_bb](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/96bed5/32.png) [@ideawire\_bb](https://www.ruby-forum.com/u/ideawire_bb)\
**Post date:** [February 1, 2007, 9:02pm UTC](https://www.ruby-forum.com/t/active-record-relationships/84140/3 "2007-02-01T21:02:11Z")

</div>

> Basically, you need to add a bit more logic:
> 
> \<% if membership.dividend %\>  
> \<%= member.dividend.broker\_name %\>  
> \<% else %\>  
> Not Entered  
> \<% end %\>

Thanks Steve. Your suggestion worked. Much appreciated.

---

<div class="post-metadata">

**Author:** ![ideawire\_bb](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/96bed5/32.png) [@ideawire\_bb](https://www.ruby-forum.com/u/ideawire_bb)\
**Post date:** [February 1, 2007, 9:09pm UTC](https://www.ruby-forum.com/t/active-record-relationships/84140/4 "2007-02-01T21:09:15Z")

</div>

Stephen B. wrote:

> There is probably a way to make this a bit neater for your views, but  
> hopefully this’ll help you on your way.

you could always use the “?” operator:

\<%= membership.dividend ? member.dividend.broker\_name : “Not Entered” %\>

> Steve

regards,  
Rolando.-
