# Case of If?

**URL:** <https://www.ruby-forum.com/t/case-of-if/110122>\
**Category:** Rails\
**Created:** [July 23, 2007, 3:58pm UTC](https://www.ruby-forum.com/t/case-of-if/110122 "2007-07-23T15:58:58Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Armitage](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/779978/32.png) [@Armitage](https://www.ruby-forum.com/u/Armitage)\
**Post date:** [July 23, 2007, 3:58pm UTC](https://www.ruby-forum.com/t/case-of-if/110122/1 "2007-07-23T15:58:58Z")

</div>

Hi All

Just pondering how you would write a statement to convert all the  
output of a database.

That is if you had yes/no fields stored as 1’s and 0’s could you write  
a simple statement to iterate though all of them and change the 1 to a  
“Yes”?

I know you can do it individually but how about all of them?

Cheers

---

<div class="post-metadata">

**Author:** ![Armitage](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/779978/32.png) [@Armitage](https://www.ruby-forum.com/u/Armitage)\
**Post date:** [July 23, 2007, 4:31pm UTC](https://www.ruby-forum.com/t/case-of-if/110122/2 "2007-07-23T16:31:45Z")

</div>

On Jul 23, 8:58 am, Armitage [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Hi All
> 
> Just pondering how you would write a statement to convert all the  
> output of a database.
> 
> That is if you had yes/no fields stored as 1’s and 0’s could you write  
> a simple statement to iterate though all of them and change the 1 to a  
> “Yes”?
> 
> I know you can do it individually but how about all of them?

You can do the equivalent of a SQL UPDATE command by using update\_all:

MyModel.update\_all “myfield = Yes”, “myfield = 1”

BUT, why would you do this? Leaving it as one/zero gives you some  
free behavior in your model. Let’s say your column is called  
‘activated’ or something like that. Leave it as 1/0 and you can do:

my\_model.activated?

This will return true if it’s a 1, false otherwise.

If you need to display “yes” or “no” somewhere in a view, and that’s  
why you’re changing the data, then you can write a helper method to do  
that:

def display\_activated(model)  
model.activated == ‘1’ ? ‘Yes’ : ‘No’  
end

and then in your view:

\<%= display\_activated(@model) %\>

But again, I’m not sure why you need to change the data, so my  
suggestions may or may not be appropriate…? Let me know.

Jeff  
[www.essentialrails.com](http://www.essentialrails.com) - 2-Day Rails training for beginners. Rails  
made simple. And fun.

---

<div class="post-metadata">

**Author:** ![Armitage](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/779978/32.png) [@Armitage](https://www.ruby-forum.com/u/Armitage)\
**Post date:** [July 24, 2007, 9:04am UTC](https://www.ruby-forum.com/t/case-of-if/110122/3 "2007-07-24T09:04:48Z")

</div>

Hi Jeff

Thanks for your response  
I don’t think I was terribly clear I am afraid, I dont want to change  
the output in the database but in the html table I am outputting. I am  
storing the Yes/No values as Zeroes and Ones and just wondered how you  
would write some sort of global method to say where you see a ‘0’  
writer 'No ’

Rod

---

<div class="post-metadata">

**Author:** ![Armitage](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/779978/32.png) [@Armitage](https://www.ruby-forum.com/u/Armitage)\
**Post date:** [July 24, 2007, 11:21am UTC](https://www.ruby-forum.com/t/case-of-if/110122/4 "2007-07-24T11:21:41Z")

</div>

Yep you are absolutely right…

Thanks to both for your input - note to self drink coffee before  
posting without fully reading

Thanks again!

On Jul 24, 9:42 am, Shai R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![Armitage](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/779978/32.png) [@Armitage](https://www.ruby-forum.com/u/Armitage)\
**Post date:** [July 24, 2007, 10:42am UTC](https://www.ruby-forum.com/t/case-of-if/110122/5 "2007-07-24T10:42:02Z")

</div>

this is exactly what jeff was displaying to you:

> If you need to display “yes” or “no” somewhere in a view, and that’s  
> why you’re changing the data, then you can write a helper method to do  
> that:

here you define the method that will change the ‘1’ to a ‘yes’ and the  
‘0’ to a ‘no’ string:

> > def display\_activated(model)  
> > model.activated == ‘1’ ? ‘Yes’ : ‘No’  
> > end
> > 
> > ## u may want to do the middle line as model.activated==false ? ‘no’ :‘yes’
> > 
> > ## if you store 1’s and 0’s in boolean fields …

and here you call the method, to write the ‘no’ / ‘yes’ according to the  
@model.activated value:

> \<%= display\_activated(@model) %\>
> 
> ## output would be either ‘yes’ / ‘no’ depending on @model

isn’t this what you want?  
hth

---

<div class="post-metadata">

**Author:** ![Armitage](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/779978/32.png) [@Armitage](https://www.ruby-forum.com/u/Armitage)\
**Post date:** [August 1, 2007, 11:33pm UTC](https://www.ruby-forum.com/t/case-of-if/110122/6 "2007-08-01T23:33:30Z")

</div>

On Jul 24, 3:42 am, Shai R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> this is exactly what jeff was displaying to you:
> 
> > > ## u may want to do the middle line as model.activated==false ? ‘no’ :‘yes’
> > > 
> > > ## if you store 1’s and 0’s in boolean fields …

You can also shorten that line even further to

model.activated? ? ‘yes’ : ‘no’

That seems more clear, no?
