Veerasundaravel's Ruby on Rails Weblog

March 27, 2010

Better way of creating custom classes

Hi Everyone,

I tried to create one custom class and assign some attributes to that class object. Where I tried to build a custom class like below:

class Property
attr_accessor :id, :title, :description, :price
end

output:

property = Property.new
property.id = 1
property.title = ‘Flats near beach road’
property.price = ‘52522’
puts property.inspect
#<Property:0xb77c7290 @title=”Flats near beach road”, @id=1, @price=”52522″>

Oh its not good, for each attributes I’m running a separate assignment statements. But in active record you can create an object with assignment like below:

property = Property.new(:id=>1, :title=>”Flats near beach road”, :price=>’52522′)

So its need little change in your class Property, follow the below:

class Property

attr_accessor :id, :title, :description, :price
def initialize(attributes=nil)
return if attributes.nil?
attributes.each { |att,value| self.send(“#{att}=”, value) }
result = yield self if block_given?
result
end

end

property = Property.new(:id=>1, :title=>”Flats near beach road”, :price=>’52522′)
puts property.inspect
#<Property:0xb77c7290 @title=”Flats near beach road”, @id=1, @price=”52522″>

puts property.title #Flats near beach road
puts property.price #52522