# Avoiding Nil errors

**URL:** <https://www.ruby-forum.com/t/avoiding-nil-errors/76094>\
**Category:** Rails\
**Created:** [November 15, 2006, 7:43pm UTC](https://www.ruby-forum.com/t/avoiding-nil-errors/76094 "2006-11-15T19:43:17Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![bluengreen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/2bfe46/32.png) [@bluengreen](https://www.ruby-forum.com/u/bluengreen)\
**Post date:** [November 15, 2006, 7:43pm UTC](https://www.ruby-forum.com/t/avoiding-nil-errors/76094/1 "2006-11-15T19:43:17Z")

</div>

How do I suppress the nil errors in ActionView Erb templates?

For instance if I have a record in the database table that allows null  
fields and then I show the record, in this case an association using  
belongs\_to, how do I suppress the Nil errors on those fields that are  
null?

Thanks,  
Phill

---

<div class="post-metadata">

**Author:** ![bluengreen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/2bfe46/32.png) [@bluengreen](https://www.ruby-forum.com/u/bluengreen)\
**Post date:** [November 15, 2006, 8:25pm UTC](https://www.ruby-forum.com/t/avoiding-nil-errors/76094/2 "2006-11-15T20:25:25Z")

</div>

If I am understanding your question correctly, this may help:

\<%= event.category? event.category.name : ‘No Category Set’ %\>

-Bradly

---

<div class="post-metadata">

**Author:** ![bluengreen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/2bfe46/32.png) [@bluengreen](https://www.ruby-forum.com/u/bluengreen)\
**Post date:** [November 15, 2006, 9:31pm UTC](https://www.ruby-forum.com/t/avoiding-nil-errors/76094/3 "2006-11-15T21:31:43Z")

</div>

Thanks. That is what I’m looking for. I was wondering though if there  
was an simpler / cleaner way than if statements though.

Thanks again,

phill

---

<div class="post-metadata">

**Author:** ![bluengreen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/2bfe46/32.png) [@bluengreen](https://www.ruby-forum.com/u/bluengreen)\
**Post date:** [November 15, 2006, 9:45pm UTC](https://www.ruby-forum.com/t/avoiding-nil-errors/76094/4 "2006-11-15T21:45:46Z")

</div>

On Nov 15, 2006, at 21:30 , bluengreen wrote:

> Thanks. That is what I’m looking for. I was wondering though if there  
> was an simpler / cleaner way than if statements though.

\<%= event.category.name rescue ‘No Category Set’ %\>

–  
Jakob S. - [http://mentalized.net](http://mentalized.net)

---

<div class="post-metadata">

**Author:** ![bluengreen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/2bfe46/32.png) [@bluengreen](https://www.ruby-forum.com/u/bluengreen)\
**Post date:** [November 15, 2006, 10:17pm UTC](https://www.ruby-forum.com/t/avoiding-nil-errors/76094/5 "2006-11-15T22:17:49Z")

</div>

also works:

\<%= event.category.name || “default” %\>

---

<div class="post-metadata">

**Author:** ![bluengreen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/2bfe46/32.png) [@bluengreen](https://www.ruby-forum.com/u/bluengreen)\
**Post date:** [November 15, 2006, 10:49pm UTC](https://www.ruby-forum.com/t/avoiding-nil-errors/76094/6 "2006-11-15T22:49:57Z")

</div>

On 15 Nov 2006, at 22:15, Chris H. wrote:

> > > there  
> > > was an simpler / cleaner way than if statements though.
> > 
> > \<%= event.category.name rescue ‘No Category Set’ %\>

I’ve already used all the different ways described in previous  
messages, but there has to be a way of setting a global replacement  
string. My views are just littered with code like that and it doesn’t  
look nice. A helper might probably help, but even that adds code to  
every value in the view.

Best regards

Peter De Berdt

---

<div class="post-metadata">

**Author:** ![bluengreen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/2bfe46/32.png) [@bluengreen](https://www.ruby-forum.com/u/bluengreen)\
**Post date:** [November 15, 2006, 11:22pm UTC](https://www.ruby-forum.com/t/avoiding-nil-errors/76094/7 "2006-11-15T23:22:00Z")

</div>

Hey,

As has already been pointed out, you can use ‘rescue’, however I find  
that the Law of Demeter [1] helps here.

class Event \< ActiveRecord::Base  
belongs\_to :category

def category\_name  
self.category and self.category.name or “No Category Name”  
end  
end

\<%= event.category\_name %\>

Another option is to declare a helper method:

def event\_category\_name(event)  
event.category and event.category.name or “No Category Name”  
end

\<%= event\_category\_name(event) %\>

And finally, if (for example) the event’s ‘name’ is always the  
category’s name then you can use delegate():

class Event \< ActiveRecord::Base  
belongs\_to :category  
delegate :name, :to =\> ‘(self.category or return “No Category Name”)’  
end

\<%= event.name %\>

Hope this helps,  
Trevor

[1] [Law of Demeter: Principle of Least Knowledge](http://www.ccs.neu.edu/home/lieber/LoD.html)
