I am trying to create an application loosely based on the Depot
application
presented in Agile Web D. with Rails (AWDwR). I am using
InstantRails
for the server. In my app I have the folowing controllers:
admin_controller
application_controller
city_map_controller (with method: displayGMap)
The admin_controller was created with the following command:
ruby script/generate scaffold Gmap Admin
so that I could easily create records in the gmaps table (created with
this code):
DROP TABLE IF EXISTS gmaps
;
CREATE TABLE gmaps
(
id
int(11) NOT NULL auto_increment,
type
tinyint(4) NOT NULL default ‘0’,
description
varchar(100) collate latin1_general_cs NOT NULL default
‘’,
lat
float NOT NULL default ‘0’,
lon
float NOT NULL default ‘0’,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs
COMMENT=‘For storing certain geolocations’ AUTO_INCREMENT=6 ;
In the Gmap model I have the following code:
class Gmap < ActiveRecord::Base
require ‘pp’
validates_presence_of(:type)
validates_inclusion_of(:type,
:in => 0…4,
:message => “should be a valid abcRealty Map type”)
def self.allMapPoints
Gmap.find(:all,
:order => “description asc”)
results = find_by_sql(“select id, description from gmaps WHERE 1”)
pp results[0]
pp(Gmap.columns_hash[‘type’])
results
end
Note that I cannot get the ‘find :all’ statement to work. It yields a
failure:
SyntaxError in City mapController#index
(eval):1:in compute_type': compile error (eval):1: parse error, unexpected tINTEGER Object::0 ^ C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.2/lib/active_record/base.rb:1244:in
compute_type’
If I switch to my debug statements, when I do reference the ‘type’ field
in the ‘find_by_sql’ statement I get an identical error.
If I don’t reference the ‘type’ field in the ‘find_by_sql’ statement I
get
the following on the application console (running WEBrick):
=> Booting WEBrick…
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
#<Gmap:0x38b31a8 @attributes={“id”=>“1”, “description”=>“City: Palo
Alto, CA”}>
#<ActiveRecord::ConnectionAdapters::MysqlColumn:0x38bee60
@default=0,
@limit=4,
@name=“type”,
@null=false,
@number=true,
@primary=false,
@sql_type=“tinyint(4)”,
@text=false,
@type=:integer>
At first I thought I had corrupted something when I added the ‘type’
column to
the gmaps table using phpMyAdmin. (I also reran the scaffold generator
to update that;
recall my app is like the Depot app in AWDwR.) The only thing I have
found so far
to get this working is to rename the ‘type’ column to something else.
Then everything works fine. My question is this: why do I get this
behavior when
I name a table column ‘type’? I am a newcomer to Ruby and Rails. Is
there
something I am missing?