Dubbi atavici con rails

Ciao a tutti,
sto muovendo i primi passi con rails e dopo aver letto un po di
tutorial, mi sono accorto che rails 2.1 cambia (soprattutto) il modo di
gestire lo scaffolding e sto cercando di adattare gli esempi che ho
trovato a rails 2; avrei bisogno di alcuni chiarimenti, che forse sono
banali, ma giusto per non avere dubbi fin dall’inizio:

Problema: creare una TodoList

ho 2 tabelle: una rappresenta le liste ed una rappresenta le cose da
fare; la relazione todos --> todo_items è 1 a molti
Quindi:
ruby script/generate scaffold Todo name:string done:integer
rake db:migrate
ruby script/generate scaffold Todo_Item name:string done:integer
todos_id:integer
rake db:migrate
e fin qui tutto bene nel senso che mi crea le tabelle ed il resto in
modo corretto

Domanda: nella tabella degli Items viene creato il campo per la chiave
importata (todos_id) ma la foreign key la devo creare io, è corretto
oppure sbaglio qualcosa ?
D: se voglio aggiungere un campo lo aggiungo nel db e lo posso già
gestire con la model corrispondente, naturalmente dovrò aggiungerlo a
mano in tutti i file creati dallo scaffolding (ad esempio nelle viste)
oppure c’è un modo per rigenerare tutto automaticamente ?

Quando inserisco le relazioni nelle model scrivo

file todo.rb
class Todo < ActiveRecord::Base
has_many:todo_items
end

file todo_item.rb
class TodoItem < ActiveRecord::Base
belongs_to:todo
end

Domanda: il valore degli attributi has_many e belongs_to è il nome della
model oppure quello della tabella (todo è il nome della tabella ma
singolare ?? Però negli esempi fa così…). Il mio dubbio è che non so
mai a cosa mi devo riferire …

se da console scrivo:

lista1=Todo.new
=> #<Todo id: nil, name: nil, done: nil, created_at: nil, updated_at:
nil>

lista1.name=“Lista cose fare”
=> “Lista cose fare”

lista1.done=0
=> 0

item1=Todo_Item.new
LoadError: Expected
/home/Luigi/myScripts/RoR/todo/app/models/todo_item.rb to define
Todo_Item
from
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:261:in
load_missing_constant' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:467:inconst_missing’
from
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:479:in
`const_missing’
from (irb):4

ottengo questo errore

Qualcuno da indicarmi dove posso trovare esempi magari già con rails 2ml ?

Grazie a tutti in anticipo !

Così, ad intuito, Todo_Item non è un nome valido per una classe. Cioè
Rails non si aspetta sto formato. Ti consiglierei TodoList ed Item.

Luca

blog: www.lucaguidi.com
Pro-Netics: www.pro-netics.com
Sourcesense - making sense of Open Source: www.sourcesense.com

Luigi M. wrote:


file todo_item.rb
class TodoItem < ActiveRecord::Base
belongs_to:todo
end


se da console scrivo:

item1=Todo_Item.new

La classe Todo_Item non esiste.
Esiste la classe TodoItem.

Alle mercoledì 18 giugno 2008, Luigi M. ha scritto:

Ciao a tutti,
Domanda: nella tabella degli Items viene creato il campo per la chiave
importata (todos_id) ma la foreign key la devo creare io, è corretto
oppure sbaglio qualcosa ?

E’ corretto la foreign key non mi risulta che te la crea
automaticamente, nè
tantomeno è necessaria.

D: se voglio aggiungere un campo lo aggiungo nel db e lo posso già
gestire con la model corrispondente, naturalmente dovrò aggiungerlo a
mano in tutti i file creati dallo scaffolding (ad esempio nelle viste)
oppure c’è un modo per rigenerare tutto automaticamente ?

Non dovresti modificare manualmente il db, dovresti invece creare una
migration con le modifiche apportate.
Ad ogni modo lo scaffolding non è obbligatorio utilizzarlo, è un aiuto
fornito
da rails, ma non mi risulta si possa fare una cosa del genere.
In genere in un progetto complesso io parto dal db e poi genero
eventualmente
il model e il controller separatamente.

Domanda: il valore degli attributi has_many e belongs_to è il nome della
model oppure quello della tabella (todo è il nome della tabella ma
singolare ?? Però negli esempi fa così…). Il mio dubbio è che non so
mai a cosa mi devo riferire …

devi pensare in inglese: belongs_to (appartiene a) è singolare. has_many
invece è prurale
Ciao
G.