Erwin
1
I found that it’s easy w Rails 2.0 to deserialize !
data = XmlSimple.xml_in(result)
v = Hash.from_xml(result).values.first
=> {“membership_at”=>“2007-03-28T21:25:31Z”,
“display_name”=>“chane850”, “first_name”=>nil, “last_name”=>nil}
so now how can I build an ActiveRecord-like object (don’t want to
create a table)
Membership class with these attributes ?
@membership = Membership.new.build( v ) ? doesn’ t work
any clue ?
thanks
Erwin
2
Create this class, called tableless.rb in your app/models folder
Table-less model used for any object that needs validation or for
any web form that does not need a database.
Idea and concept from Rick O.
class Tableless < ActiveRecord::Base
def self.columns()
@columns ||= [];
end
def self.column(name, sql_type = nil, default = nil, null = true)
columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s,
default,
sql_type.to_s, null)
end
override the save method to prevent exceptions.
def save(validate = true)
validate ? valid? : true
end
end
Now just create a new class called Membership (app/models/membership.rb)
class Membership < Tableless
column :display_name, :string
column :first_name, :string
column :last_name, :string
column :membership_at, :datetime
validates_presence_of :display_name, :first_name, :last_name,
membership_at
end
And then get ready to rock.
m = Membership.new(hash_from_xml)
if m.valid?
do stuff
else
do other failure stuff
end
Throw your other membership business rules in the membership.rb class
too.
I use this technique for contact forms, etc that don’t need backends.