Q. What resource do readers recommend for referencing regarding best practices for form construction in Rails? I have the following situation: location_type of Locations may have one of five (5) possible codes. Presently I have these codes listed in a drop-down select constructed thusly: <p> <b>Location type</b><br /> <%= f.select :location_type, [ ['MAIN - Main Address', 'MAIN'], ['POST - Postal Delivery', 'POST'], ['DELV - Package Delivery', 'DELV'], ['SHIP - Package Shipping', 'SHIP'], ['OTHR - Other', 'OTHR'], ], :selected => 'MAIN', :size => 4 -%> </p> Should this instead be constructed so that the model, Locations, has these virtual attributes: valid_location_type= [ ['MAIN - Main Location','MAIN'], ['POST - Postal Delivery', 'POST'], ... ] default_location_type = 'MAIN' and then the view could have this instead: <%= f.select :location_type, @location.valid_location_type, :selected => @location.default_location_type, :size => 4 Would this even work? Comments?
on 2008-11-05 21:31
on 2008-11-05 21:46
On Nov 5, 7:31 pm, James B. <firstname.lastname@example.org> wrote: > default_location_type = 'MAIN' > Personally I would have it as a constant of the Location class, ie class Location ... VALID_TYPES = [...] end Fred
on 2008-11-05 22:02
Frederick C. wrote: > On Nov 5, 7:31ï¿½pm, James B. <email@example.com> > wrote: >> ï¿½ ï¿½ default_location_type = 'MAIN' >> > Personally I would have it as a constant of the Location class, ie > > class Location ... > VALID_TYPES = [...] > end > > Fred Point taken. Nonetheless, in the interim I have tested it and this does indeed work as expected. However, I used private methods and public getters to implement. def valid_location_type virt_valid_type end private def virt_valid_type vvt = [ ['MAIN - Main Address', 'MAIN'], ['POST - Postal Delivery', 'POST'], ['DELV - Package Delivery', 'DELV'], ['SHIP - Package Shipping', 'SHIP'], ['OTHR - Other', 'OTHR'] ] end But my question remains: Is this the preferred idiom or is there another recommended way to do this?
on 2008-11-05 22:44
Looks like a good place to give this a spin: http://railscasts.com/episodes/121-non-active-record-model Basically, use a pure-ruby class to wrap the location types and let it support an ActiveRecord like interface (mainly find and all). Then you can do collection_select the way you would with a normal ARec model. Depending on which version of Rails you're working with you may also check into PassiveRecord. It's a pretty advanced version of the same concept. Unfortunately it has dependencies on older versions of ARec. On Nov 5, 3:02 pm, James B. <firstname.lastname@example.org>
on 2008-11-06 19:14
I think Fred's given the preferred idiom. It's simple & it works.