Ouverture de session

Commentaires récents

Syndication
Flux XML

Création de contraintes et relations sur des tables via rails

Création de contraintes et relations sur des tables via rails
Posté par Shmii le Mercredi, 26 Mars, 2008 - 1:56pm. Développement

Bonjour,

Je suis débutant en Rails et je souhaiterais un peut d’aide.

Je souhaiterais crée une base de donne avec des contrainte de type « foreign key » (base de donnée en PostgeSql)
Je souhaiterais crée intégralement ma base de donnée avec rails. Via « migrate » ou autre si ce n’est pas la meilleur methode.
Mais aussi que les contraintes on « delet » et « cascade » soit fonctionnel
En gros savoir comment intégrer les contraintes et relation a mes tables et comment gérer tous ca avec ruby Rails.

Donc deux tables : livre et auteur

Les relations :
- un auteur plusieurs livres
- un livre un auteur

Avec une contrainte de type « foreign key » sur les id de ces deux tables donc.

Mon fichier de création via migrat :


create_table "livres", :force => true do |t|
t.column "nom", :text
t.column "auteur", :integer
end

create_table "auteurs", :force => true do |t|
t.column "nom", :text
t.column "prénom", :text
end

Si vous avez des liens vers des documentations  je suis preneur.

1er question :
Est-ce faisable en Rails, ou doit t’on crée à la main tous ou partis…

2eme question
Je voudrais donc savoir si c’est faisable quel serais la méthode pour faire cela via Rails

3eme question
Rails gère t’il les contrainte ?
Je m’explique en gros deux fontion rails

La 1er delete_auteur : supprimera l’auteur de la bdd mais ne devra fonctionner que si aucun livres n’est actuellement écrit par cette auteur dans la bdd …
Comment est ce géré en Rails doit t’on écrire nous même les fonctions de vérification.

La 2eme force_delete_auteur : supprimera l’auteur de la bdd et donc devra supprimer tous les livres liée a cette auteur qui existerais encore. Le cascad delet en sql
Comment est ce géré en Rails doit t’on écrire nous même les fonctions et requêtes de suppression.



[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | sujet précédent | sujet suivant | envoyer par email ]

Options d'affichage des commentaires
Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder" pour activer vos changements.

Sujet: 
Foreign Key Migrations
Auteur: 
foudfou
Date: 
Ven, 28/03/2008 - 01:06

Tu peux inclure des foreign key dans les migrations, genre :

...
  def self.up
    create_table :livres do |t|
      t.integer :auteur_id, :null => false
      t.text :nom
      t.timestamps
    end

    execute "alter table livres add constraint fk_livres_auteurs
               foreign key  (auteur_id) references auteurs(id)"
...

Dans le livre "Agile Web Development", au chapitre 10, les auteurs encouragent à créer des contraintes, comme si dessus, et suggèrent également un plugin :
http://www.redhillonrails.org/ (Foreign Key Migrations)


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
Ta base de donnees
Auteur: 
dam5s
Date: 
Mer, 26/03/2008 - 18:54

Ta base de donnees sera-t-elle utilisee par un autre programme que ton appli Rails?

Si c'est le cas je comprends que tu veuilles gerer les contraintes par le biais de la BDD elle-meme. Mais a ce moment je ne pourrais que conseiller de creer les tables autrement que par le biais des migrations de Rails.

Si ce n'est pas le cas, la convention Rails veut qu'on ne donne aucune contrainte a la base de donnees, si ce n'est le type des colonnes. Par convention ce sont les models de l'application Rails qui gerent les contraintes d'eux meme. Pour en savoir plus, je te conseil de lire la documentation d'ActiveRecord::Base dans l'API de Rails.

--
Damien
http://www.webdrivenblog.com/


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
Scaffold et relations
Auteur: 
minikermit
Date: 
Mer, 26/03/2008 - 16:08

Si c'est du scaffolding que tu veux faire, le mode de base ne gère pas les relations. Tu peux utiliser un plugin qui le gère (http://www.activescaffold.com/ par exemple) ou sinon tu dois coder ta relation à la main avec un has_many et belongs_to.


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Nouveaux liens

Sondage
Lorsque je développe avec Ruby on Rails c'est principalement sous:
Linux
38%
Mac OS X
29%
Windows
31%
(Free|Open|Net) BSD
1%
Autre...
1%
Nombre de votes: 345

Qui est en ligne
Il y a actuellement 1 utilisateur et 27 invités en ligne.

railsfrance.org - communauté francophone des utilisateurs de Ruby on Rails
[ Hébergement et ressources techniques gracieusement fournis par la SSLL Nuxos Group ]