Long time programmer, but I just started learning RoR last week. I am going through some examples in the book "Ruby on Rails: Up and Running".
The example I am on had me add a table to the database that looks like so: CREATE TABLE people ( `id` int(11) NOT NULL auto_increment, `type` varchar(20) default NULL, `name` varchar(20) default NULL, `email` varchar(30) default NULL, `street_address` varchar(30) default NULL, `city` varchar(30) default NULL, `state` varchar(20) default NULL, `zip` int(5) default NULL, `camera` varchar(20) default NULL, PRIMARY KEY (`id`) )
In addition, I created the following two classes:
class Person < ActiveRecord::Base composed_of :address, :class_name => "Address", :mapping => [[:street_address, :street_address], [:city, :city], [:state, :state], [:zip, :zip]] end
class Address def initialize(street_address, city, state, zip) @street_address = street_address @city = city @state = state @zip = zip end
attr_reader :street_address, :city, :state, :zip end
Finally, it had me run the following commands in Console:
elvis.name=Person.new
elvis.name=Person.new NameError: undefined local variable or method `elvis' for #<Object: 0x284f9e8> from (irb):1
elvis=Person.new
elvis=Person.new => #<Person id: nil, type: nil, name: nil, email: nil, street_address: nil, city: nil, state: nil, zip: nil, camera: nil>
elvis.name="Elvis Presley"
elvis.name="Elvis Presley" => "Elvis Presley"
elvis.email="elvis@graceland.com"
elvis.email="elvis@graceland.com" => "elvis@graceland.com"
address=Address.new("3734 Elvis Presley Blvd", "Memphis", "Tennessee", 38118)
address=Address.new("3734 Elvis Presley Blvd", "Memphis", "Tennessee", 38118) => #<Address:0x3f3ce94 @street_address="3734 Elvis Presley Blvd", @zip=38118, @state="Tennessee", @city="Memphis">
elvis.address=address
elvis.address=address => #<Address:0x3f3ce94 @street_address="3734 Elvis Presley Blvd", @zip=38118, @state="Tennessee", @city="Memphis">
elvis.save
elvis.save
However, when I ran the latter-most command, "elvis.save" I received the following (abbreviated) error:
NoMethodError: undefined method `<=>' for :zip:Symbol from C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/base.rb:2177:in `sort' from C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/base.rb:2177:in `attribute_names' from C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/base.rb:2458:in `clone_attributes' ...
Why is the method '<=>' being attempted on the zip field?