Ich möchte hier auf eine Frage eingehen, die der Flo in einem Kommentar gestellt hat.
Es geht darum, wie man Legacy-Schemata in Rails verwenden kann, die beispielsweise nicht über eine ID-Autoinkrement-Spalte verfügen.
Nun ich habe dazu folgendes gemacht, nur um das Prinzip zu zeigen. Dies ist keine 1-zu-1-Anleitung für den unbedarften Nachahmer:
Im Folgenden zeige ich die einzelnen Schritte:
pg-269:~/rp ghadir$ mysql -u root population_development
mysql> create table MYTABLE (
->
-> objectidentifier int not null,
-> name varchar(40),
-> constraint MYTABLEPK PRIMARY KEY (objectidentifier)
-> )
->
-> ;
Query OK, 0 rows affected (0.01 sec)
1 class Mytable < ActiveRecord::Base
2
3 @@counter = 1000
4
5 set_table_name 'mytable'
6 set_primary_key 'objectidentifier'
7
8 before_save :create_oid
9
10 def create_oid
11 if self.id == nil then
12 @@counter += 1
13 self.id = @@counter
14 end
15 end
16 end
pg-269:~/rp ghadir$ script/console
>> mt = Mytable.new :name => ‘TEST’
>> Mytable.find :all
#=> []
>> mt.save
=> true
>> Mytable.find :all
=> [#“TEST”, “objectidentifier”=>”1001”}>]
>> mt = Mytable.new :name => ‘TEST’
=> #“TEST”}>
>> mt.save
=> true
>> Mytable.find :all
=> [#“TEST”, “objectidentifier”=>”1001”}>, #“TEST”, “objectidentifier”=>”1002”}>]
Dieser Code ist natürlich unpraktisch, da ich nicht berücksichtige, dass objectidentifier eigentlich wieder der id zugewiesen werden muss, falls er gesetzt ist aber die id nicht. Sonst würde es mit den Scaffolds nicht funktionieren. Also ein gewisser Transfer muss gemacht werden. :-)
Ich hoffe trotzdem, dass klar geworden ist, dass auch die Anbindung einer Legacy-Tabelle mit wenigen Schritten getan werden kann.
Posted by Phillip Ghadir at June 1, 2007 7:23 PM