Ruby on Rails propose des méthodes « create_table » et une fonctionnalité « db:migrate », qui permetten de créer la base de données de votre application.
Des exemples sur « Migration » sont disponibles avec l’API du framework.
Par défaut, l’outil crée un champ « id », qui est la clé primaire de votre table.
Vous pouvez modifier cela avec les options « id » et « primary_key » lors de l’appel à la fonction create_table.
Ainsi, pour créer une table « test » sans clé primaire, il vous faut faire :
create_table :test, :id => false do |t|
end
Vous pouvez également créer une table avec une clé primaire qui se nommerait « myId »
create_table :test, :primary_key => "myId" do |t|
end
Mais vous pouvez également désirer créer une table avec deux champs comprenant la clé primaire. Vous pouvez essayer de mettre deux champs dans primary_key malheureusement, cela ne fonctionne pas (vraissemblablement car certains SGBDR ne gèrent pas la création de clé primaires constituées de deux champs).
Il va donc falloir tricher. Sachez déjà que notre base ne sera pas en 3e forme normale.
Créeons donc d’abord une table « user_access » avec deux champs : user_id et access_id
create_table :user_access, :id => false do |t|
t.column :user_id, :integer
t.column :access_id, :integer
end
Maintenant il nous faut déclarer nos deux champs comme étant des index.
add_index :user_access, [:user_id, :access_id], :unique
Nous créeons donc un index unique contenant nos deux champs. Nous n’avons pas de clé primaire à proprement parler. Mais le SGBDR traitera la chose de la même manière.
Le code en entier :
class AddUserAccess < ActiveRecord::Migration
def self.up
create_table :user_access, :id => false do |t|
t.column :user_id, :integer
t.column :access_id, :integer
end
add_index :user_access, [:user_id, :access_id], :unique
end
end


















