# An elegant way to check for nil and then check the value

**URL:** <https://www.ruby-forum.com/t/an-elegant-way-to-check-for-nil-and-then-check-the-value/48793>\
**Category:** Rails\
**Created:** [November 24, 2005, 9:25pm UTC](https://www.ruby-forum.com/t/an-elegant-way-to-check-for-nil-and-then-check-the-value/48793 "2005-11-24T21:25:13Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![ivanvr](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/c67d28/32.png) [@ivanvr](https://www.ruby-forum.com/u/ivanvr)\
**Post date:** [November 24, 2005, 9:25pm UTC](https://www.ruby-forum.com/t/an-elegant-way-to-check-for-nil-and-then-check-the-value/48793/1 "2005-11-24T21:25:13Z")

</div>

Hi,

I’m sure there’s an elegant way of doing the following:

```
def ep_is_sysop
    sysop = false
    if not @session['user'].nil?
        sysop = true if @session['user'].role == 'siteop'
    end
    sysop
end

```

Could you help me out?

Thanks!

Ivan V.

---

<div class="post-metadata">

**Author:** ![ivanvr](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/c67d28/32.png) [@ivanvr](https://www.ruby-forum.com/u/ivanvr)\
**Post date:** [November 24, 2005, 9:29pm UTC](https://www.ruby-forum.com/t/an-elegant-way-to-check-for-nil-and-then-check-the-value/48793/2 "2005-11-24T21:29:15Z")

</div>

On 24 Nov 2005, at 20:25, Iván Vega R. wrote:

> I’m sure there’s an elegant way of doing the following:
> 
> def ep\_is\_sysop  
> sysop = false  
> if not @session[‘user’].nil?  
> sysop = true if @session[‘user’].role == ‘siteop’  
> end  
> sysop  
> end

Bit new to Ruby & Rails so I’m probably wrong, but I’d do

def ep\_is\_sysop  
@session[‘user’] && @session[‘user’].role == ‘siteop’  
end

## Yours, Craig

Craig W. | t: +44 (0)131 516 8595 | e: removed\_email\_address@domain.invalid  
[Xeriom.NET](http://Xeriom.NET) | f: +44 (0)709 287 1902 | w: [http://xeriom.net](http://xeriom.net)

---

<div class="post-metadata">

**Author:** ![ivanvr](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/c67d28/32.png) [@ivanvr](https://www.ruby-forum.com/u/ivanvr)\
**Post date:** [November 24, 2005, 9:41pm UTC](https://www.ruby-forum.com/t/an-elegant-way-to-check-for-nil-and-then-check-the-value/48793/3 "2005-11-24T21:41:22Z")

</div>

I don’t know if this is any prettier but should be able to do:  
(untested)

```
def ep_is_sysop
@session['user'] and @session['user'].role == 'siteop'
end
```

---

<div class="post-metadata">

**Author:** ![ivanvr](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/c67d28/32.png) [@ivanvr](https://www.ruby-forum.com/u/ivanvr)\
**Post date:** [November 24, 2005, 10:37pm UTC](https://www.ruby-forum.com/t/an-elegant-way-to-check-for-nil-and-then-check-the-value/48793/4 "2005-11-24T22:37:46Z")

</div>

How about

def ep\_is\_sysop  
@session[‘user’] == ‘siteop’  
end

nil compared to anythng will always yield false. qed

---

<div class="post-metadata">

**Author:** ![ivanvr](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/c67d28/32.png) [@ivanvr](https://www.ruby-forum.com/u/ivanvr)\
**Post date:** [November 24, 2005, 10:37pm UTC](https://www.ruby-forum.com/t/an-elegant-way-to-check-for-nil-and-then-check-the-value/48793/5 "2005-11-24T22:37:46Z")

</div>

Oops

---

<div class="post-metadata">

**Author:** ![ivanvr](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/c67d28/32.png) [@ivanvr](https://www.ruby-forum.com/u/ivanvr)\
**Post date:** [November 24, 2005, 11:14pm UTC](https://www.ruby-forum.com/t/an-elegant-way-to-check-for-nil-and-then-check-the-value/48793/6 "2005-11-24T23:14:06Z")

</div>

D’oh… Ruby is so simple and intuitive (for a “empty” brain that is)  
that it actually makes it really hard for me… I’m always trying to do  
stuff like I’d do in PHP or in other languages.

Thanks Craig & Robert. Hendie, that’s what I was doing at first, but I  
think you’ve already realized why it doesn’t always work 🙂

Ivan V.

---

<div class="post-metadata">

**Author:** ![ivanvr](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/c67d28/32.png) [@ivanvr](https://www.ruby-forum.com/u/ivanvr)\
**Post date:** [November 25, 2005, 12:33am UTC](https://www.ruby-forum.com/t/an-elegant-way-to-check-for-nil-and-then-check-the-value/48793/7 "2005-11-25T00:33:54Z")

</div>

ivanvr wrote:

> I’m sure there’s an elegant way of doing the following:
> 
> ```
> def ep_is_sysop
> sysop = false
> if not @session['user'].nil?
> sysop = true if @session['user'].role == 'siteop'
> end
> sysop
> end
> 
> ```

The answer was already given, but it may be worthwhile to check out

> **[WebMD - Better information. Better health.](https://www.webmd.com/?RubyIdioms)**
>
> The leading source for trustworthy and timely health and medical news and information. Providing credible health information, supportive community, and educational services by blending award-winning expertise in content, community services, expert...

which addresses this, and many other useful bits.

Cheers,  
-Tudor

---

<div class="post-metadata">

**Author:** ![ivanvr](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/c67d28/32.png) [@ivanvr](https://www.ruby-forum.com/u/ivanvr)\
**Post date:** [November 25, 2005, 4:24am UTC](https://www.ruby-forum.com/t/an-elegant-way-to-check-for-nil-and-then-check-the-value/48793/8 "2005-11-25T04:24:14Z")

</div>

Using boolean short-circuit operators is not language specific. It’s  
more  
idiomatic. So, while you might be more likely to write the code below in  
PHP, it would also work if you wrote:

function ep\_is\_sysop(){  
return (!empty($\_SESSION[‘user’] && $\_SESSION[‘user’] == ‘siteop’);  
}

That’s not to say you should use PHP. Just that you can use some similar  
constructs to this.

cheers

---

<div class="post-metadata">

**Author:** ![ivanvr](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/c67d28/32.png) [@ivanvr](https://www.ruby-forum.com/u/ivanvr)\
**Post date:** [November 25, 2005, 2:11am UTC](https://www.ruby-forum.com/t/an-elegant-way-to-check-for-nil-and-then-check-the-value/48793/9 "2005-11-25T02:11:21Z")

</div>

Tudor Oprea wrote:

> > ```
> > end
> > 
> > ```

Hey, that’s pretty useful information! Thanks!

Ivan V.
