I have some data that I want to store somewhere in my Rails app because I use it for generating form fields, checking a submitted form to ensure its values are valid, etc. Basically, I want the data in one location because I make use of it in several places.
Previously, I was defining an initialize method in my controller and initializing instance variables within that method, e.g. @graph_types = ['bar', 'line']. This seemed a bad idea because that’s really all initialize was being used for (initializing those values) and the instance variables could be changed later, which I don’t want.
Now, I define constants outside of any method in my controller, right up at the top after my filters, and I freeze them, e.g. GraphTypes = ['bar', 'line'].freeze.
I didn’t want to store such data in a config file because then I would have to keep track of an extra file, read in the file and parse it, etc. I didn’t want to store this data in the database because that seems like overkill; I don’t need to do any crazy LEFT OUTER JOIN-type queries combining available graph types with another of my constants, say Themes = ['Keynote', 'Odeo', '37 Signals', 'Rails Keynote'].freeze. I didn’t want to store the data in environment.rb because this data only pertains to a particular controller.
Considering all this, am I going about this ‘the Ruby way’?
I believe what you are currently doing is fine; you said the data only pertains to one controller, and therefore that’s where it belongs. If it was needed for multiple controllers, or if they were more complex than constant values, other approaches may make sense.