I’m new to Ruby, so I’m sure this is an easy one.
I have the following class:
class Pilot < ActiveRecord::Base
validates_presence_of :last_name, :first_name, :middle_name, :birth_date
has_many :flights, :dependent => :destroy
has_many :aircraft
def flight_count
return flights.length
end
def full_name
puts "full_name()"
name = ""
if @first_name != nil then
name += @first_name
end
puts "@first_name = \\"#{@first_name}\\" name = \\"#{name}\\""
if @middle_name != nil then
name += " " + @middle_name
end
puts "@middle_name = \\"#{@middle_name}\\" name = \\"#{name}\\""
if @last_name != nil then
name += " " + @last_name
end
puts "@last_name = \\"#{@last_name}\\" name = \\"#{name}\\""
puts "full_name() returns \\"#{name}\\""
return name
end
def inspect
return to_s
end
def to_s
return "Pilot [#{id}](name = \\"#{self.full_name}\\" birth_date = " + (birth_date == nil ? "nil" : birth_date.to_formatted_s(:short)) + " flights = " + flight_count.to_s + ")"
end
end
When I call the full_name method from a web page, it returns the full name as expected. But when I call if from the to_s method, it returns an empty string because first_name, last_name, and middle_name are empty strings. Here’s the console output:
C:\\Ruby\\projects\\logbook>ruby script/server
=> Booting Mongrel
=> Rails 2.3.5 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
new() pilot_id: "2"
full_name()
@first_name = "" name = ""
@middle_name = "" name = ""
@last_name = "" name = ""
full_name() returns ""
pilot = "Pilot [2](name = "" birth_date = 12 Oct flights = 1)"
full_name()
@first_name = "" name = ""
@middle_name = "" name = ""
@last_name = "" name = ""
full_name() returns ""
pilot = "Pilot [2](name = "" birth_date = 12 Oct flights = 1)"
full_name()
@first_name = "" name = ""
@middle_name = "" name = ""
@last_name = "" name = ""
full_name() returns ""
Processing FlightsController#new (for 127.0.0.1 at 2010-04-13 21:46:55) [GET]
Parameters: {"pilot_id"=>"2"}
←[4;36;1mPilot Load (0.0ms)←[0m ←[0;1mSELECT * FROM "pilots" WHERE ("pilots"
."id" = 2) ←[0m
←[4;35;1mFlight Load (0.0ms)←[0m ←[0mSELECT * FROM "flights" WHERE ("flights
".pilot_id = 2) ←[0m
Rendering template within layouts/flights
Rendering flights/new
Rendered flights/_form (1047.0ms)
Completed in 2422ms (View: 1359, DB: 0) | 200 OK [http://localhost/pilots/2/flig
hts/new]
Any ideas what I’m doing wrong?