# Conditional variable assignment from array

**URL:** <https://www.ruby-forum.com/t/conditional-variable-assignment-from-array/82906>\
**Category:** Ruby\
**Created:** [January 22, 2007, 10:00am UTC](https://www.ruby-forum.com/t/conditional-variable-assignment-from-array/82906 "2007-01-22T10:00:25Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [January 22, 2007, 10:00am UTC](https://www.ruby-forum.com/t/conditional-variable-assignment-from-array/82906/1 "2007-01-22T10:00:25Z")

</div>

one of my methods receives a sort parameter either as

params =\> {“sort”=\>{“criteria”=\>“1”} }  
OR  
params =\> {“sort”=\>“1”}

presently, I assign a variable @sc as follows :

params[:sort].nil? ? @sc = “1” : @sc = params[:sort][:criteria]

how can I assign @sc to params[:sort][:criteria] OR params[:sort]  
whatever received… ?

tfyh

joss

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [January 22, 2007, 10:11am UTC](https://www.ruby-forum.com/t/conditional-variable-assignment-from-array/82906/2 "2007-01-22T10:11:29Z")

</div>

Josselin wrote:

> how can I assign @sc to params[:sort][:criteria] OR params[:sort]  
> whatever received… ?

You could try something like

stuff = params[:sort]  
@sc = stuff.is\_a? String ? stuff : stuff[:criteria] unless stuff == nil

Maybe I did not understand your question properly, if this does not seem  
to work, please try to elaborate…

Peter

\_\_  
[http://www.rubyrailways.com](http://www.rubyrailways.com)

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [January 22, 2007, 11:01am UTC](https://www.ruby-forum.com/t/conditional-variable-assignment-from-array/82906/3 "2007-01-22T11:01:35Z")

</div>

On 22.01.2007 09:57, Josselin wrote:

> how can I assign @sc to params[:sort][:criteria] OR params[:sort]  
> whatever received… ?

First of all you cannot mix symbol and string keys, i.e. you cannot use  
a symbol to retrieve a string key:

irb(main):001:0\> h={“sort”=\>1}  
=\> {“sort”=\>1}  
irb(main):002:0\> h[:sort]  
=\> nil

Maybe you want something like this:

tmp = params[“sort”]  
@sc = Hash === tmp ? tmp[“criteria”] : tmp

Cheers

robert

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [January 22, 2007, 11:41am UTC](https://www.ruby-forum.com/t/conditional-variable-assignment-from-array/82906/4 "2007-01-22T11:41:01Z")

</div>

Josselin wrote:

> how can I assign @sc to params[:sort][:criteria] OR params[:sort]  
> whatever received… ?
> 
> tfyh
> 
> joss

h = {“sort”=\>{“criteria”=\>{“criterion”=\>{“foo”=\>“1”}}}}

# Get the innermost value.

while (h = h.to\_a.flatten.last).class == Hash do end  
p h
