Scaffold et les foreign keys.. C'est si bien que ça?

Bonjour à tous !

Je suis étudiant en école d’ingé, en architecture des systèmes
d’informations.

Ce semestre, j’ai décidé de prendre une UV libre sur Ruby On Rails, pour
découvrir ce merveilleux langage (et, accessoirement, faire un résumé de
l’essentiel à mon prof pour qu’il découvre ce langage sans se taper le
sale boulot :smiley: ).

La première chose qui frappe, c’est le manque de doc online en français,
j’ai donc pu emprunter le bouquin Ruby On Rails chez Eyerolles (très
bien par ailleurs).

Ce qui m’attire chez RoR, c’est l’idée de pouvoir générer très
rapidement une application, Ã partir de vraiment pas grand chose…
Notamment avec Scaffold :slight_smile: .

Scaffold est-il simplement destiné à faire quelques démos magiques pour
les rares exemples que l’on trouve, ou bien est-il réellement efficace ?

Je bute actuellement sur un petit problème, ça va peut-être vous
paraitre débile, mais c’est important pour moi :). Le voici :

Comment demander à Scaffold de tenir compte des clés étrangères (Foreign
Keys) quand il génère le code ?

On peut prendre l’exemple d’un blog, ce sujet est dailleurs développé
ici :
http://www.eyrolles.com/Informatique/Articles/Rails/blog.html

Si je créé ma table article, et ma table commentaire, avec les relations
has_many et belongs_to bien ou il faut dans les classes… Scaffold ne
peut t’il pas générer du code qui automatiquement tient compte des
relations de clés étrangères ?

Dans l’exemple du site, ils utilisent un scaffold pour articles, mais
pas pour commentaires… c’est de la triche !!

Je ne sais pas si j’ai été très clair, mais en gros j’aimerai savoir si
on peut faire en sorte que Scaffold tienne compte des clés étrangères,
ainsi que des tables de jointures. Histoire de vraiment générer un site
à la volée :wink:

Tant que j’y suis… Petite question subsidiaire : les champs created_at,
et updated_at, sont bien gérés par rails qui fait les maj du temps
nécessaires snas code supplémentaire, Scaffold par contre créé des
champs de formulaires pour remplir ces valeurs, il n’a donc (enfin je
suppose) pas compris leur but. Une convention à moitié appliquée ?

Voila voila, j’espère que vous m’aurez compris, et que j’obtiendrai des
réponses positives, j’ai envie de croire à la magie de RoR :smiley:

Bonne journée à tous, merci de votre lecture

Cordialement,

Pierre-Yves Ricau

PS : j’écris depuis un système Linux, et en UTF-8. Je ne sais pas si mes
accents vont bien passer, car quand je me balade dans votre forum, je
n’ai que des caractères inconnus à la place des accents (cela ne
m’arrive sur aucun autre site :s :s)

Salut, excellent choix d’avoir choisi Ruby on Rails.
Je vais tacher d’apporter une reponse sur les deux points : la doc FR et
le Scaffold.

La Doc FR : effectivement il n’existe pas de grosse doc FR centralisee,
mais c’est un peu la meme chose en Anglais. Les informations sont assez
décentralisées sur des milliers de blogs de développeurs passionnés pour
la plupart.

Mais si tu regardes les autres frameworks Web de seconde génération,
c’est souvent la même chose, voir moins bien : documentation sous forme
de wiki incomplet et j’en passe pour certains projets.

Lorsque l’on demande une bonne documentation pour commencer, la plupart
des développeurs Rails recommandent d’acheter le bouquin
‘officiel/bible’ : Agile Web D. with Rails 2nd Edition sorti
fin 2006.

La première édition a été localisée en Français par Eyerolles mais de
nombreux concepts ont fortement évolués entre la version 1.0 et la
version 1.2 de Rails : notamment les conventions de création des
formulaires, l’aspect AJAX via les vues RJS, le déployement (de FCGI a
Mongrel avec load balancing), et j’en passe.

http://www.pragmaticprogrammer.com/titles/rails/index.html > seconde
édition en anglais, a commander sur amazon.fr depuis la france (moins
cher) :
http://www.amazon.fr/Agile-Development-Rails-Dave-Thomas/dp/0977616630/sr=8-1/qid=1172062969/ref=pd_ka_1/403-2592318-0391662?ie=UTF8&s=english-books

Après la lecture de ce bouquin, l’excellente API de Ruby on Rails permet
de s’en sortir dans la plupart des cas : http://api.rubyonrails.org,
sans compter les nombreux blogs qui permettent souvent de trouver de
bonnes astuces.
(http://errtheblog.com est excellent).

A propos du scaffold, je copie/colle direct une réponse que j’ai postée
sur le
forum developpez.com d’une personne qui se demandait aussi pourquoi le
scaffold n’est pas aussi magique que “ça”.

Comprends bien que Rails, même s’il est basé sur des conventions ne fait
pas de “reverse enginering” sur ta table. Ce n’est pas à lui de le
faire. Par conséquent, si tu as des clés étrangères dans tes tables, tu
dois lui faire comprendre précisément en utilisant comme tu l’as fait
“has_many”, “belongs_to”, etc.

Là où la convention Rails joue c’est que tu lui dis que y a une clé
étrangère mais tu n’as pas besoin de lui dire que la clé étrangère c’est
truc_id. Voilà la convention.

A propos du scaffold, il faut simplement comprendre le scaffold dans
Rails. Pour moi le scaffold c’est juste un script pour faire joli, pour
épater la galerie, les débutants, mais c’est pas un script à forcément
utiliser. La plupart des développeurs ne l’utilisent pas. Le script de
scaffold ne fait que générer un modèle, un contrôleur et quelques vues
génériques autour de ce modèle pour les opérations de bases (CRUD :
create update delete). C’est un script générique, qui ne fonctionne que
sur un modèle et qui ne gère pas toutes les spécificités, clés
étrangères, etc. C’est au développeur après d’adapter le scaffold selon
ses besoins.

Ce que je te conseille c’est en premier de comprendre comment faire les
opérations de base sur un modèle simple, sans clé étrangère.
Puis après de te documenter dans la doc API sur comment gérer les clés
étrangères, tu verras que Rails facilite le travail.

Je te recommande de jouer avec la console pour voir les mécanismes en
temps réel. Lance un “./script/console” a partir du dossier de ton appli
et teste.

Dans un autre terminal, fait un “tail -f log/development.log” pour voir
en temps réel les requetes envoyées au SGBD.

Teste voir :
Code :

home = Home.new home.name = “maison 1” user = User.new user.name =
“utilisateur 1” home.users << user home.save

Si tu regarde le log, tu verras les 2 insert avec les bonnes liaisons !
Magique… Et regarde la beauté et la lisibilité du code franchement…

Tu peux même faire plus court et remplacer les 3 avant dernieres lignes
par un create avec passage des attributs du nouvel user en hash.

Code :

home.users.create( { :name => “utilisateur 1” } )

Une fois que tu auras bien compris comment gérer les associations avec
Rails, tu pourras améliorer les formulaires du scaffold générique du
modèle User par exemple, en rajoutant une select box qui permettra de
choisir le Home à relier au nouvel user… Ce n’est pas Rails et le
scaffold qui peut prévoir ce genre de chose…

J’espère que ma réponse te conviendra et t’encouragera à continuer…

Nicolas.

Pierre-Yves Ricau wrote:

Bonjour à tous !

Je suis étudiant en école d’ingé, en architecture des systèmes
d’informations.

Ce semestre, j’ai décidé de prendre une UV libre sur Ruby On Rails, pour
découvrir ce merveilleux langage (et, accessoirement, faire un résumé de
l’essentiel à mon prof pour qu’il découvre ce langage sans se taper le
sale boulot :smiley: ).

La première chose qui frappe, c’est le manque de doc online en français,
j’ai donc pu emprunter le bouquin Ruby On Rails chez Eyerolles (très
bien par ailleurs).

Ce qui m’attire chez RoR, c’est l’idée de pouvoir générer très
rapidement une application, Ã partir de vraiment pas grand chose…
Notamment avec Scaffold :slight_smile: .

Scaffold est-il simplement destiné à faire quelques démos magiques pour
les rares exemples que l’on trouve, ou bien est-il réellement efficace ?

Je bute actuellement sur un petit problème, ça va peut-être vous
paraitre débile, mais c’est important pour moi :). Le voici :

Comment demander à Scaffold de tenir compte des clés étrangères (Foreign
Keys) quand il génère le code ?

On peut prendre l’exemple d’un blog, ce sujet est dailleurs développé
ici :
http://www.eyrolles.com/Informatique/Articles/Rails/blog.html

Si je créé ma table article, et ma table commentaire, avec les relations
has_many et belongs_to bien ou il faut dans les classes… Scaffold ne
peut t’il pas générer du code qui automatiquement tient compte des
relations de clés étrangères ?

Dans l’exemple du site, ils utilisent un scaffold pour articles, mais
pas pour commentaires… c’est de la triche !!

Je ne sais pas si j’ai été très clair, mais en gros j’aimerai savoir si
on peut faire en sorte que Scaffold tienne compte des clés étrangères,
ainsi que des tables de jointures. Histoire de vraiment générer un site
à la volée :wink:

Tant que j’y suis… Petite question subsidiaire : les champs created_at,
et updated_at, sont bien gérés par rails qui fait les maj du temps
nécessaires snas code supplémentaire, Scaffold par contre créé des
champs de formulaires pour remplir ces valeurs, il n’a donc (enfin je
suppose) pas compris leur but. Une convention à moitié appliquée ?

Voila voila, j’espère que vous m’aurez compris, et que j’obtiendrai des
réponses positives, j’ai envie de croire à la magie de RoR :smiley:

Bonne journée à tous, merci de votre lecture

Cordialement,

Pierre-Yves Ricau

PS : j’écris depuis un système Linux, et en UTF-8. Je ne sais pas si mes
accents vont bien passer, car quand je me balade dans votre forum, je
n’ai que des caractères inconnus à la place des accents (cela ne
m’arrive sur aucun autre site :s :s)