best way to see if an item is in a list

Hey there, i am in my 4th day of working in rails. I dig it a lot. I
have a question about the best way to go about something.

We monitor the conditions of equipment
each piece of equipment has a current status.
each status will corrospond to a list in a table that we have called
key_words is just kinda like a configuration settings table, no
relationships, just a list of keys and values.

so i have something like this in key_words
key = 'running' value = 'r, run, running, rng, pwr, power_on'
key = 'not_running' value = 's, stp, stop, not_rng'

so each value is actually a list of possibilities. i need to be able to
pass a status to see which list its in.
so if i pass 'r' to the function, it will return 'running' and i can
use that to display an image on the website that shows that the machine
is running.

now, i am pretty sure i can pull this off, but i wanted some opinion of
where to put it. Do i put it in the key_words.rb model,
key_words_controller.rb or in the application.rb ( as it will be used
in more than one place)

i thought it would go a little something like this

def check_if_running(status)
    running = KeyWord.find(1, :conditions => " key = 'running' " ) #
this will get me the list
    look thru pickaxe to see how to tell if status in the list returned
    return true if (status is in running list)
    return false

i suppose it would look different if its in the key_words.rb model

any advice ?

If the list of words is fairly static, the database may be overkill for this
application - all you are really looking for is a mapping from status words
to running/not-running. Have you considered implementing this as a straight
hash table? If you’re concerned about maintaining the configuration, you
could pull the actual values out to a YAML file, and load it in environment.rb.

For instance, add this to your environment.rb:

key_word_is_running = YAML::load_file(‘key_words.yaml’)

key_words.yaml looks like this:

r: 1
run: 1
running: 1
rng: 1
pwr: 1
power_on: 1
s: 0
stp: 0
stop: 0
not_rng: 0

In your code, you would simply say:


Further refinement of the YAML format is certainly possible - for example, to
look more like the data in the original example (two lists, “running” and “not_running”).

If the database is a requirement, it still seems more efficient to map the
values directly, rather than having unstructured lists in the values.

So your schema would be more like:

id (integer)
status_word (string)
running (boolean)

Then your code reduces to:


Hope this helps,