Hi, I am forced to use an old database with rails.
Relevant db structure;
Hi, I am forced to use an old database with rails.
Relevant db structure;
Hi, I am forced to use an old database with rails.
Relevant db structure;
> select id,permission,incid from acl group by id; +----+------------+-------+ > id | permission | incid | +----+------------+-------+ > 1 | 58 | 1 | > 2 | 57 | 25 | > 3 | 57 | 32 | +----+------------+-------+
Show create table acl:
CREATE TABLE `acl` ( id` int(4) NOT NULL, ..... `incid` int(11) NOT NULL auto_increment, PRIMARY KEY (`id`,`type`,`seq`,`incid`), UNIQUE KEY `incid` (`incid`)
So the primary key that I want to use in place of id is "incid"
"id" contains some acl ids and is not auto increment (has multiple rows returned per one `id`).
My model looks like this:
class Acl < ActiveRecord::Base set_table_name :acl; set_primary_key :incid; def self.primary_key() 'incid'; end self.primary_key = 'incid'; set_inheritance_column :ruby_id; end
script/console
r = Acl.find(2); <-- that's checking for `incid`
?> r.id => 2
log: Acl Load (0.3ms) SELECT * FROM `acl` WHERE (`acl`.`incid` = 2)
script/console
r = Acl.find(31);
?> r.id => 31 Acl Load (0.3ms) SELECT * FROM `acl` WHERE (`acl`.`incid` = 31)
So, instead of r.id returning the value of the `id` field , it returns the value for the incid field.
For the second example it should have returned `2` instead of `31` which is actually the value of `incid`
> select id,permission,incid from acl where incid='31'; +----+------------+-------+ > id | permission | incid | +----+------------+-------+ > 2 | 57 | 31 | +----+------------+-------+
What should my model look like to be able to get the value of the `id` field?
Dan
See if you can get the field that you want with this syntax:
r=Acl.find(31); r[:id]
r.id will always be the primary key (as you've discovered), but r[:id] (or r['id'] if you prefer) will give you the 'id' attribute. (I recently had to refer to a column 'type' this way because ruby wants r.type to be the same as r.class, and r[:type] always returns the column.)
-Rob
Rob Biedenharn http://agileconsultingllc.com Rob@AgileConsultingLLC.com
Hi, I am forced to use an old database with rails.
Relevant db structure;
> select id,permission,incid from acl group by id; +----+------------+-------+ > id | permission | incid | +----+------------+-------+ > 1 | 58 | 1 | > 2 | 57 | 25 | > 3 | 57 | 32 | +----+------------+-------+
Show create table acl:
CREATE TABLE `acl` ( id` int(4) NOT NULL, ..... `incid` int(11) NOT NULL auto_increment, PRIMARY KEY (`id`,`type`,`seq`,`incid`), UNIQUE KEY `incid` (`incid`)
So the primary key that I want to use in place of id is "incid"
"id" contains some acl ids and is not auto increment (has multiple rows returned per one `id`).
My model looks like this:
class Acl < ActiveRecord::Base set_table_name :acl; set_primary_key :incid; def self.primary_key() 'incid'; end self.primary_key = 'incid'; set_inheritance_column :ruby_id; end
script/console>> r = Acl.find(2); <-- that's checking for `incid`
?> r.id => 2
log: Acl Load (0.3ms) SELECT * FROM `acl` WHERE (`acl`.`incid` = 2)
script/console>> r = Acl.find(31);
?> r.id => 31 Acl Load (0.3ms) SELECT * FROM `acl` WHERE (`acl`.`incid` = 31)
So, instead of r.id returning the value of the `id` field , it returns the value for the incid field.
For the second example it should have returned `2` instead of `31` which is actually the value of `incid`
> select id,permission,incid from acl where incid='31'; +----+------------+-------+ > id | permission | incid | +----+------------+-------+ > 2 | 57 | 31 | +----+------------+-------+
What should my model look like to be able to get the value of the `id` field?
Dan
just use model.attributes[:id] or model.read_attribute :id