Ouverture de session

Commentaires récents

Syndication
Flux XML

et encore un nouveau tutorial (debut _creation du projet et du modele)

et encore un nouveau tutorial (debut _creation du projet et du modele)
Posté par orfeu le Dimanche, 6 Mai, 2007 - 4:18pm.

Créer son forum sous Rails (ou quelque chose qui pourra peut etre un jour y ressembler).

Pour commencer je suis débutant en édition internet et donc sur rails aussi, j'ai pensé que le fait de faire un chtit tutorial pourrait m'aider a faire les choses correctement et peut etre recevoir un peu d'aide si je me plante completement dans la conception.
Apprendre rails n'est pas si aisé que ca... Il faut y aller petit a petit, sortir du copier coller de tutoriels déjà tout faits est assez hardu... Donc je vais essayer ici de montrer les étapes clefs (en tout cas ce que j'en ai compris a travers mes différentes lectures).

Partie 1: definir ce que l'on veut faire.

On l'oublie souvent lorsqu'on est débutant et c'est pourtant la phase la plus importante!
L'objet de ce tutorial est de créer un forum, (pas un trop compliqué quand meme...) j'entends par ca :
la creation de salles de discution (seulement par l'administrateur)
la creation de sujets dans ces salles par les internautes
l'ajout de posts dans les sujets par les internautes

Pour cela il va falloir avoir un systeme d'authentification basique, j'ai choisi d'utiliser le plugin de rails act_as_authentificated; pour le reste il faut un peu d'huile de coudes...

Partie 2: création du projet et configuration

Désolé mais je ferais l'impasse sur l'installation de rails, d'autres l'expliquent bien mieux que je ne pourrais le faire (par exemple http://blog-perso.onzeweb.info/2006/12/16/rails-mongrel-apache-ubuntu-production/ sur ubuntu ou « googelez » le et je suis sur que vous trouverez tout ce qu'il faut)

Je commence par le début:
Créer un projet

orfeu@CasseTeteChinois:~$ rails test
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
.
. c'est la liste des dossiers et fichiers créés
.
create log/development.log
create log/test.log
orfeu@CasseTeteChinois:~$ cd test
orfeu@CasseTeteChinois:~/test$ ls
app config doc log Rakefile script tmp
components db lib public README test vendor

La commande rails crée un projet vide, et tout est intégré...

Pour démarrer le serveur:

orfeu@CasseTeteChinois:~/test$ script/server
=> Booting WEBrick...
=> Rails application started on http://127.0.0.1:3000
=> Ctrl-C to shutdown server; call with --help for options
[2007-05-06 11:58:45] INFO WEBrick 1.3.1
[2007-05-06 11:58:45] INFO ruby 1.8.5 (2006-08-25) [i486-linux]
[2007-05-06 11:58:45] INFO WEBrick::HTTPServer#start: pid=5413 port=3000

Comme il est écrit ci dessus, un server WEBrick est démarré, sur le port 3000. Donc normalement si vous utilisez votre navigateur internet préféré à l'adresse http://localhost:3000 vous devez tomber sur une page disant que vous avez un nouveau projet rails mais qu'il est vide, il ne reste plus qu'a le remplir...

Pour configurer la base de données,dans le fichier config/database.yml, trouvez la section:

development:
adapter: mysql # type de base de données
database: test_development #nom de la base dont rails va se servir
username: rails
password: pourquoi
host: localhost

Vous aurez a créer la base de données et l'utilisateur:

orfeu@CasseTeteChinois:~/test$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.0.38-Ubuntu_0ubuntu1-log Ubuntu 7.04 distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database test_development;
Query OK, 1 row affected (0.00 sec)

mysql> create user 'rails'@'localhost' identified by 'pourquoi';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on test_development.* to 'rails'@'localhost';
Query OK, 0 rows affected (0.00 sec)

Partie 3: le modele

Creation du système d'authentification

Pour cela comme je l'ai dis precedemment on va utilisetr act-as authentificated, pour avoir toutes les information de son fonctionnement voici le site:
http://technoweenie.stikipad.com/plugins/show/Acts+as+Authenticated

le système des plugins est assez simple, pour ajouter le plugin au projet courant:

orfeu@CasseTeteChinois:~/test$ script/plugin source http://svn.techno-weenie.net/projects/plugins
Added 1 repositories.
orfeu@CasseTeteChinois:~/test$ script/plugin install acts_as_authenticated
/usr/lib/ruby/1.8/open-uri.rb:211: command not found: svn ls svn://rubyforge.org/var/svn/expressica/plugins/
+ ./acts_as_authenticated/CHANGELOG
+ ./acts_as_authenticated/README
+ ./acts_as_authenticated/generators/authenticated/USAGE
... liste des fichiers installés

Le plugin est maintenant intallé, il contient des générateurs dont on va se servir pour créer un systeme d'authentification:

orfeu@CasseTeteChinois:~/test$ script/generate authenticated user account
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/account
exists test/functional/
exists test/unit/
create app/models/user.rb
create app/controllers/account_controller.rb
create lib/authenticated_system.rb
create lib/authenticated_test_helper.rb
create test/functional/account_controller_test.rb
create app/helpers/account_helper.rb
create test/unit/user_test.rb
create test/fixtures/users.yml
create app/views/account/index.rhtml
create app/views/account/login.rhtml
create app/views/account/signup.rhtml
create db/migrate
create db/migrate/001_create_users.rb

Creation du modèle du forum

Nous allons créer trois modèles: room, subject et post

orfeu@CasseTeteChinois:~/test$ script/generate model room;script/generate model subject;script/generate model post;
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/room.rb
create test/unit/room_test.rb
create test/fixtures/rooms.yml
exists db/migrate
create db/migrate/002_create_rooms.rb
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/subject.rb
create test/unit/subject_test.rb
create test/fixtures/subjects.yml
exists db/migrate
create db/migrate/003_create_subjects.rb
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/post.rb
create test/unit/post_test.rb
create test/fixtures/posts.yml
exists db/migrate
create db/migrate/004_create_posts.rb

rails a ici créé des modeles vides, il faut les remplir...

db/migrate/002_create_rooms.rb
class CreateRooms < ActiveRecord::Migration
def self.up
create_table :rooms do |t|
t.column :name, :string
t.column :description, :string
end
end
end

db/migrate/003_create_subjects.rb
class CreateSubjects < ActiveRecord::Migration
def self.up
create_table :subjects do |t|
t.column :name, :string
t.column :created_on, :date
t.column :updated_on, :datetime
t.column :description, :string
end
execute "alter table subjects
add constraint fk_room
foreign key (room_id) references rooms(id)"
end
end

db/migrate/004_create_posts.rb
class CreatePosts < ActiveRecord::Migration
def self.up
create_table :posts do |t|
t.column :subject_id, :int
t.column :user_id, :int
t.column :created_on, :datetime
t.column :content, :string
end
execute "alter table posts
add constraint fk_subject
foreign key (subject_id) references subjects(id)"

execute "alter table posts
add constraint fk_user
foreign key (user_id) references users(id)"
end

Maintenant que nous avons achevé la création du modèle coté bdd, nous pouvons les insérer dans la base de données avec l'outil rake :

orfeu@CasseTeteChinois:~/test$ rake db:migrate
(in /home/orfeu/test)
== CreateRooms: migrating =====================================================
-- create_table(:rooms)
-> 0.3495s
== CreateRooms: migrated (0.3496s) ============================================

== CreateSubjects: migrating ==================================================
-- create_table(:subjects)
-> 0.0335s
== CreateSubjects: migrated (0.0337s) =========================================

== CreatePosts: migrating =====================================================
-- create_table(:posts)
-> 0.0592s
== CreatePosts: migrated (0.0594s) ============================================

== CreateUsers: migrating =====================================================
-- create_table("users", {:force=>true})
-> 0.0617s
== CreateUsers: migrated (0.0621s) ============================================

Maintenant que nous avons implémenté notre modèle dans notre base de données, nous allons le faire du coté application. Rails utilise activerecord pour mettre en relation la base de données relationnelle et les objets ruby.
Les modifications:

app/model/room.rb
class Room < ActiveRecord::Base
has_many :subject
end

app/model/subject.rb
class Subject < ActiveRecord::Base
belongs_to :room
has_many :post
end

app/model/post.rb
class Post < ActiveRecord::Base
belongs_to :user
belongs_to :subject
end

et l'ajout de
has_many :post
dans app/model/user.rb
nous permettent de faire comprendre les dépendance entre les objets à l'application.



[ version imprimable | Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | 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: 
en fait un peu ambitieux pour le débutant que je suis
Auteur: 
orfeu
Date: 
Ven, 18/05/2007 - 18:38

Debutant mais déterminé


[ 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
37%
Mac OS X
29%
Windows
32%
(Free|Open|Net) BSD
1%
Autre...
1%
Nombre de votes: 361

Qui est en ligne
Il y a actuellement 1 utilisateur et 52 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 ]