Case of If?

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:


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 - 2-Day Rails training for beginners. Rails made simple. And fun.

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 '


Yep you are absolutely right....

<slightly embarrassed>

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

Thanks again!

You can also shorten that line even further to

model.activated? ? 'yes' : 'no'

That seems more clear, no?