Tuto cookBook


#1

Salut

je suis en train de suivre le tuto cookbook (la version VF)
j’utilise une de db sqlite3. Alors voila mon problème lors de première
migration de la base; il y pas de blem la table “recipes” est bien
créer.
Apres dans le tuto on demande d’ajouter des champs. J’ajoute mes champs
comme ceci
def self.up
puts ‘Création de la table’
create_table :recipes do |t|
t.column :titre, :string
t.column :description; :string
t.column :date; :datatime
t.column :instruction, :text
end
end

mais apres lorsque je remigrate la table, ben la je n’ai aucun
changement la
table ne se créer pas

Bolo


#2

Bonjour,

Je ne comprends pas exactement ce que tu fais (quel code est dans quel
fichier) mais avant de creuser plus on peut déjà corriger ton code :

  1. le type :datatime n’existe pas. C’est :datetime
  2. il faut séparer les arguments des méthodes par des virgules et non pas
    des points-virgules ;o)

ce qui donne :

def self.up
puts ‘Création de la table’
create_table :recipes do |t|
t.column :titre, :string
t.column :description, :string
t.column :date, :datetime
t.column :instruction, :text
end
end

Déjà ça peut améliorer les choses :o)

Stéphane Thibaudeau.


#3

Bonjour,

esseye avec les corections ci-dessous :

Apres dans le tuto on demande d’ajouter des champs. J’ajoute mes
champs comme ceci
def self.up
puts ‘Création de la table’
create_table :recipes do |t|
t.column :titre, :string
t.column :description; :string
t.column :description, :string
t.column :date; :datatime
t.column :date, :datetime
t.column :instruction, :text
end
end

Voila HTH


#4

je vais faire les corrections. Alors j’ai suivi le tuto suivant
http://www.railsfrance.org/files/active/2/On_Lamp_com-rolling_with_rails_partie_1-fr.pdf.
Je suis a la page 27. Comme je n’utilise pas mySQL j’ai essayé de
regénérer
la table.

2006/4/18, Mathieu FOSSE removed_email_address@domain.invalid:


#5

Bonjour,

Il serait intéressant que tu indiques le lien vers ce tutoriel.

En fait si j’ai bien compris :

  1. tu as créé une table ‘recipes’
  2. tu veux effectuer des modifications sur cette table en utilisant
    ‘migrate’ ? (modification du schéma de la table)

Si c’est ça…

def self.up
puts ‘Création de la table’
create_table :recipes do |t|
t.column :titre, :string
t.column :description; :string
t.column :date; :datatime
t.column :instruction, :text
end
end

…ton script (ci dessus) ne peut pas modifier le schéma de la table
‘recipes’ car il essai de créer cette table alors qu’elle existe déjà.
Il pourrait écraser le schéma de cette table (avant de créer le
nouveau) si l’option :force était positionnée à true.
( au passage attention dans ton script beaucoup de ‘;’ doivent être
remplacer par des ‘,’ et ‘datatime’ n’existe pas mais ‘datetime’ lui
oui).

Après modification, voilà ce que ça donne :

def self.up
puts ‘Création de la table’
create_table :recipes, :force => true do |t|
t.column :titre, :string
t.column :description, :string
t.column :date, :datetime
t.column :instruction, :text
end
end

En lançant ce script, la table ‘recipes’ sera droppée et créée avec le
nouveau schéma.

Si tu veux simplement effectuer un ajout, suppression de colonnes…
regarde plutôt du côté de ‘add_column’.

Pour plus d’info :
http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#M000604

Mathieu

On 4/18/06, Bolo M. removed_email_address@domain.invalid wrote:

   t.column :titre, :string


Martinique Sans Fil
http://www.martiniquesansfil.com


Railsfrance mailing list
removed_email_address@domain.invalid
http://lists.rubyonrails.fr/mailman/listinfo/railsfrance


Mathieu FOSSE


#6

Que veut tu faire precisement,

  • créer une nouvelle table. Dans ce cas ce n’est pas add_column qu’il
    faut utiliser mais bien un bloc create_table
  • modifier une table deja existante alors la il te faut bien utiliser
    add_column

De plus c’est pas obligatoire mais conseillé n’oublie pas d’ecrire la
methode self.donw qui detriut ce que tu crée dans self.up. Elle est
utilisé dans le cas d’un “downgrade” de ton schema de base de données.

Le 18 avr. 06 à 23:27, Bolo M. a écrit :

  1. Dois je le mettre dans mon fichier 001_create_recipes.rb ?
    Dans ston fichier 001_*, tu as la creation da la base de données
    ainsi que la ou les tables de base
  1. Dois je garder le précédent script me permetant de créer ma
    base ?
    Je dirai oui si ta table est deja crééee et que ton appli est
    fonctionnel, tu
  1. pour regéner ma table, je n’ai qu’a faire un rake migrate ?
    Oui, rake migrate fonctionne de la manière suivante:
    Il regarde d’abord le numéro de version du schéma de base de
    données (contenu dans la table schema_info) si il n’y en a pas il
    part de 1 inclu.
    Puis execute tout les scripts de migration entre ce numéro et le
    dernier numéro de script qu’il trouve dans le répertoire migration.

Par exemple:
soit le repertoire suivant (cas tiré d’un de mes applis)



  • Si mon numéro de schéma est le 2 rake migrate execute tous les
    script de 2 exclu a 6 inclus

Si l’on precise un numero de version a rake migrate , il va exécuter
les scripts jusqu’au numéro que tu lui donne
ex: toujours avec 2 comme schéma courant
rake migrate VERSION=5, il exécutera tous les scripts de 2 exclu a 5
inclue

Voila HTH


#7

Railsfrance mailing list
removed_email_address@domain.invalid
http://lists.rubyonrails.fr/mailman/listinfo/railsfrance


#8

avec le liens expliquant comment fonctionne add_column j’ai écris un
nouveau
script
http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#M000604

class AddFieldsToRecipes < ActiveRecord::Migration
def self.up
puts ‘Ajouts de champs dans la table’
add_column :description, :string
add_colum :date, :datetime
end
end

mais j’ai des questions

  1. Dois je le mettre dans mon fichier 001_create_recipes.rb ?
  2. Dois je garder le précédent script me permetant de créer ma base ?
  3. pour regéner ma table, je n’ai qu’a faire un rake migrate ?

Bolo

Martinique Sans Fil
http://www.martiniquesansfil.com


#9

D’accord:)

Alors j’ai créer mon fichier 002_add_column_recipe.rb

class AddColumnRecipe < ActiveRecord::Migration
def self.up
puts ‘Ajouts de champs dans la table’
add_column :description, :string
add_colum :date, :datetime
end

def self.down
puts ‘suppressions des champs description et date’
remove_column :description, :string
remove_column :date, :datetime
end
end

lorsque je tante la migration

rake migrate
(in /Users/bolomichelin/Documents/Creation_Perso/Developement/cookbook)
== AddColumnRecipe: migrating

Ajouts de champs dans la table
– add_column(:description, :string)
rake aborted!
wrong number of arguments (2 for 3)

J’ai essayé de vérifier les , et point ; mais je vois pas mon erreur


#10

Le 1er argument de add_column est le nom de la table.

Dans la doc sur migration :
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html


#11

Donc ca doit ressembler a ca ?

class AddColumnRecipe < ActiveRecord::Migration
def self.up
puts ‘Ajouts de champs dans la table’
add_column :recipes, :description, :string
add_colum :recipes, :date, :datetime
end

def self.down
puts ‘suppressions des champs description et date’
remove_column :accounts, :description, :string
remove_column :accounts, :date, :datetime
end
end

Le 19/04/06, removed_email_address@domain.invalid removed_email_address@domain.invalid a écrit :


#12

mes champs on bien été créer mais lorsque que je recharge la page

http://localhost:3002/recipes/new

je ne vois pas les “description” et “date”
2006/4/19, Bolo M. removed_email_address@domain.invalid:


#13

Salut,

2006/4/19, Bolo M. removed_email_address@domain.invalid:

def self.down
puts ‘suppressions des champs description et date’
remove_column :accounts, :description, :string
remove_column :accounts, :date, :datetime
end
end

L’opération inverse d’ajouter une colonne ‘description’ à la table
‘recipes’ n’est pas de supprimer la colonne ‘description’ de la table
‘accounts’. Un peu de logique bon sang.

РJean-Fran̤ois.


#14

Le 19 avr. 06 à 00:06, Bolo M. a écrit :

mais le script pour ajouter un champs. Je dois créer un nouveau
fichier rb ?

  1. Dois je garder le précédent script me permetant de créer ma base ?
    Je dirai oui si ta table est deja crééee et que ton appli est
    fonctionnel.
    Oui il te faut un nouveau script dans ce cas la car d’apres ce que
    tu dit la table existe deja.
    En gros on fait un nouveau script par modification du model(ou
    groupe de modification). Comme cela c’est plus facile de revenir en
    arriere en cas de probleme.

Je quoi ? tu n’as pas terminé ta phrase :slight_smile:
Oups je m’etais mal relu il etatit tard :wink:
soit le repertoire suivant (cas tiré d’un de mes applis)
5 inclue

Voila HTH

d’accord je comprends. Donc si je veux ajouter des nouveaux champs.
Je dois créer un nouveau fichier par exempl 002_add_champs.rb

Ce ficher est créer directement dans l’éditeur ou je dois le générer ?
Qu’appele tu editeur ? A prioroi il te faut le crée toi meme a l’aide
de la commande script/generate migration add_comlumn_recipe par exemple.

Voila HTH


#15

Pour cela il faut relancer la commande :
./script/generate scaffold Recipe

et répondre ‘yes’ quand il demande d’écraser ‘app/view/_form.rhtml’

Mathieu

On 4/19/06, Bolo M. removed_email_address@domain.invalid wrote:

class AddColumnRecipe < ActiveRecord::Migration

Dans la doc sur migration :

  puts 'Ajouts de champs dans la table'

– add_column(:description, :string)
Railsfrance mailing list


Mathieu FOSSE


#16

L’opération inverse d’ajouter une colonne ‘description’ à la table
‘recipes’ n’est pas de supprimer la colonne ‘description’ de la table
‘accounts’. Un peu de logique bon sang.

C’est juste un mauvais copier/coller … ca n’empeche pas de créer les
champs suivants.
Je te rapelle que j’essaye de suivre un tuto
http://www.railsfrance.org/files/active/2/On_Lamp_com-rolling_with_rails_partie_1-fr.pdf

Quoi qu’il en soit … Normalement je devrais voir le descriptions et le
champs Date quand je rafraichie la page ?

Dois je regenérer le controlleur en faisant

scrip/generate scaffold recipes ?

Merci
2006/4/19, Jean-François removed_email_address@domain.invalid:


#17

merci

2006/4/19, Mathieu FOSSE removed_email_address@domain.invalid:


#18

http://www.railsfrance.org/files/active/2/On_Lamp_com-rolling_with_rails_partie_1-fr.pdf(page
41)
Je suis a la dernière partie du tuto. Dans cette partie on doit créer un
table categories. et ajouter une clé etrangère category_id a la tables
recipes.

j’ai donc ajouté un nouveau champs ainsi

class AddCategoryidRecipe < ActiveRecord::Migration
def self.up
puts ’ ajout du champs category_id’
add_column :recipes, :category_id, :int
end

def self.down
puts ‘supressions du champs category_id’
remove_column :recipes, :category_id, :int
end
end

Apres on donc indiquer aux classes recipes et catégories le lien entre
elle.
Dans le tuto on fait ainsi

class Category < ActiveRecord::Base
has_many :recipes
end
class Recipes < ActiveRecord::Base
belongs_to :category
end

Pour l’instant cava. Mais j’ai un petit sousic avec la modification de
la
page edit. on doit faire
Dans le répertoire c:\rails\cookbook\app\views\recipe, créez un fichier
que
vous nommerez
edit.rhtml contenant le patron HTML ci-dessous. C’est presque du HTML
standard, l’astuce
principale résidant dans les balises et qui créent la
liste déroulante des
catégories:

cette page est déja crée par le model ma page ne ressemble pas du tout a
ca
mais plus a ca

Editing recipes

<%= start_form_tag :action => ‘update’, :id => @recipes %>
<%= render :partial => ‘form’ %>
<%= submit_tag ‘Edit’ %>
<%= end_form_tag %>

<%= link_to ‘Show’, :action => ‘show’, :id => @recipes %> |
<%= link_to ‘Back’, :action => ‘list’ %>

Donc je pense que dans la premère partir du code Ror construit le
formulaire
avec un bouton “edit”.
je pense que cette ligne <%= render :partial => ‘form’ %> gènere le
formulaire en fonction des champs de la talbles recipes

Si je veux ajouter un champs déroulant pour choisir la categorie de la
recette. Je fais comment dans le tuto ils ajoute celle ligne. mais la il
y a
un mélange de html et de ruby donc ca va pas marcher.

<% @categories.each do |category| %> > <%= category.name %> <% end %>

Martinique Sans Fil
http://www.martiniquesansfil.com