From: Gordon Thiesfeld Date: 2009-08-29T01:06:02+09:00 Subject: Re: Mass Assignment on Clas On Fri, Aug 28, 2009 at 6:03 AM, Pete Moran wrote: > Hi there, > > I am a total newbie to Ruby, so please bare with me. > > I want to be able to be able to initialise a Class with a hash.  For > instance If I have the class > > class Vehicle >  attr_accessor :vtype, :description, :vehicle, :capacity > end > > I want to be able to do > > Vehicle.new(:vtype => 'ECAR', :description => 'Great Car', :vehicle => > 'Ford Focus', :capacity => '10'); > > Now I could do something like > > def initialize(items) >     @vtype = items[:vtype] >     @description = items[:description] >     @vehicle = items[:vehicle] >     @capacity = items[:capacity] > #     puts items.inspect >   end > > But I was wondering if there was a more generic way of doing this > without specifically defining each variable in initialize? I think > ActiveRecord does something similar! > > Many thanks for your assist! Just playing devil's advocate, what about using OpenStruct? require 'ostruct' class Vehicle < OpenStruct end v1 = Vehicle.new(:vtype => 'ECAR', :description => 'Great Car', :vehicle => 'Ford Focus', :capacity => '10') I guess the concern would be the possibility of adding additional accessors. Using attr_accessor inside the class seems to keep me from updating the variables.