Hi, I was trying to understand stored values vs display values. # model code CLUB_TYPES = [ # Displayed stored in db [ "Public" , "pub" ], [ "Village" , "vil" ], [ "Private" , "pvt" ] ] validates_inclusion_of :club_type, :in => CLUB_TYPES.map {|disp, value| value} #view code <%= f.select :club_type, Club::CLUB_TYPES, :prompt => "Select a Club Type" %> This works fine for getting data into the database. My question: Is there a helper to get the display value back from the database? If not, could somebody show me how to correct the following to get the display value rather than the stored value. <b>Club Type:</b> <%= @club.club_type %> Thanks -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
> > # model code > > CLUB_TYPES = [ > # Displayed stored in db > [ "Public" , "pub" ], > [ "Village" , "vil" ], > [ "Private" , "pvt" ] > ] >I would change that as follows: CLUB_TYPES = { "pub" => "Public", "vil" => "Village", "pvt" => "Private" }> validates_inclusion_of :club_type, :in => > CLUB_TYPES.map {|disp, value| value} >So that becomes: validates_inclusion_of :club_type, :in => CLUB_TYPES.keys> #view code > > <%= f.select :club_type, Club::CLUB_TYPES, :prompt => "Select a Club > Type" %> >I think when using a hash you need to invert it, something like this: <%= f.select :club_type, Club::CLUB_TYPES.invert, :prompt => "Select a Club Type" %> You may need to play with that a little bit... I can''t remember and don''t have time to test it at the second...> This works fine for getting data into the database. > > My question: Is there a helper to get the display value back from the > database? If not, could somebody show me how to correct the following > to get the display value rather than the stored value. ><b>Club Type:</b>> <%= @club.club_type %> ><%= Club::CLUB_TYPES[@club.club_type] %> (or more likely a method on the model call club_type_description or something similar that does the same thing). Cheers, Andy -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 10 March 2010 14:41, Andy Jeffries <andyjeffries-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I would change that as follows: > CLUB_TYPES = { > "pub" => "Public", > "vil" => "Village", > "pvt" => "Private" > } >...as long as there''s no need for clubtypes to be displayed in any particular order (arrays are returned in order, hashs aren''t necessarily) For the minuscule amount of extra effort involved, create a model for club types, seed it, and give it a "position" column if you want to manage the order (or just put an :order clause on your default finder). Then use ClubType.all or named scopes for more functionality ... Your clubs can change their club_type text column into a club_type_id integer and add a belongs_to relationship, allowing you to do nice easy queries, leverage Rails'' functionality, and get rid of those "magic" array/hash variables. Sometimes things that seem like shortcuts (like using an array for some "static" data) can quickly turn into dead ends. The framework does all the hard work for you, so you might as well use it. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Thanks for the advice. Changing to a hash did what I wanted it to. I can see the advantage of generalizing this in a model. Thanks for the suggestion. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.