PDA

Visualizza la versione completa : Ruby On Rails


enricomail
05-01-2008, 12:31
Salve a tutti. :) Sto provando a creare un forum utilizzando ruby on rails e seguendo la guida di Html.it.Sono arrivato alla lezione 19,cioè alla validazione dell'input e ho riscontrato un problema che non so come risolvere.Nel momento in cui vado a definire il metodo valid? nel file app/model/author.rb,non mi funziona più il metodo "new"(che è spiegato nella lezione precendente),poichè anch'esso và ad applicare il metodo valid? e nel momento in cui va a compiere l'istruzione "if @author.save" mi dà false e non viene reindirizzato nella home rimanendo quindi nella pagina new.rhtml.Ho provato a definire il metodo valid? dopo l'end della classe author,ma non mi viene considerato poichè vede la classe concludersi lì,tralasciando il metodo valid?.E di conseguenza non mi va il metodo login.In pratica non so dove definire valid? all'interno della classe author,riporto i due modi:
PRIMO CASO
class Author < ActiveRecord::Base

validates_presence_of :name, :password
validates_uniqueness_of :name
validates_confirmation_of :password

has_many :messages
end
def valid?
saved=Author.find_by_name(name)
return (saved and (password == saved.password))
end
COSì FACENDO NON MI FUNZIONA IL METODO "LOGIN"




SECONDO CASO
class Author < ActiveRecord::Base

validates_presence_of :name, :password
validates_uniqueness_of :name
validates_confirmation_of :password

has_many :messages
def valid?
saved=Author.find_by_name(name)
return (saved and (password == saved.password))
end
end
COSì NON MI FUNZIONA IL METODO "NEW"

Non so dove definire il metodo valid? :( aiutatemi!!!grazie.

robyonrails
05-01-2008, 13:49
Nel primo caso il metodo non lo definisci mica all'interno della classe. :|

All'interno della classe non ha importanza il luogo in cui inserisci i metodi.

robyonrails
05-01-2008, 13:53
Vabbè la guida non la conosco, comunque ti sbagli: valid? non è un metodo di hook, e non viene utilizzato dal metodo new.


def new # vedi chiamate a valid?
if request.post?
@author=Author.new(params['author'])
if @author.save
logged
end
end
end


Il mio consiglio: usa i test.
Tra l'altro... sacrileeegio: la guida non parla dell'infrastruttura di test già integrata in rails.

enricomail
05-01-2008, 16:19
nn è così...anke il metodo se io creo e salvo un oggetto lui mi entra cmq nella classe author e m và a controllare tutti i metodi compreso quello "valid",ke nn dovrebbe considerare ma lo fa...cmq un'altra cosa,come posso modificare la classe?io lo faccio con il notepad ma credo ke si possa fare con ruby...ho provato ad aprirlo scrivendo "ruby author.rb" ma mi dice ke l'application controller nn è inizializzato:(

enricomail
05-01-2008, 17:03
nessuno mi risponde? :( ...è pure la ho seguito la guida di questo sito...speravo ke qualcuno mi aiutasse :(...

robyonrails
05-01-2008, 20:04
Ah forse ho capito. Ti mi stai dicendo che il metodo valid? produce un errore, e perciò tutta la classe è inutilizzabile ?

Per la seconda domanda: eeeeh? Stai chiedendo come modificare il sorgente: o con l'editor o con Ruby? Che senso ha? (non credo tu stia parlando nè di reflection nè di metaprogrammazione).
Con "ruby author.rb" non apri il sorgente, lo interpreti.

enricomail
06-01-2008, 13:21
No la classe funziona.Il problema è la posizione in cui vado a definire il metodo "valid" all'interno della classe.Mi spiego:se lo definisco prima dell'end,non m funziona più la redirezione(logged) del metodo "new",quindi dopo la registrazione di un utente m rimane sempre alla stessa pagina.Mentre se lo definisco dopo l'end,nn mi funziona la redirezione(logged) del metodo "login".

Per quanto riguarda la seconda domanda ti ho chiesto come modificare il sorgente(il file con la classe author) con il linguaggio ruby.Grazie

robyonrails
06-01-2008, 17:18
Scusa, riusciresti a incollare il codice completo che se no non ci capisco niente? Ma non capisco, cmq ti ho detto: per la definizione del metodo è indifferente la posizione all'interno della classe. :dottò:

Cosa vuol dire "modificare il sorgente con il linguaggio Ruby" ? Tutto quel codice che hai scritto è Ruby. :fagiano:
Quindi la risposta a "come modificare il sorgente con il linguaggio Ruby" è: apri il file (author.rb) con un editor e scrivi codice Ruby. :fagiano:

Secondo me hai un po' di confusione in testa.

enricomail
07-01-2008, 14:41
secondo me tu non leggi quello che scrivo con attenzione.Il codice lo postato prima,è sopra e ho messo pure i due casi.Per quanto riguarda il sorgente,mi sono spiegato male hai ragione,volevo chiederti come modificarlo utilizzando la "ruby console" inclusa nel pacchetto instant rails che voi,nella guida,avete consigliato di scaricarmi.Lo so che si può fare con l'editor,ma sono dei file ".rb" e credo che sia meglio modificarli con la console,se si può.

robyonrails
07-01-2008, 15:08
Originariamente inviato da enricomail
secondo me tu non leggi quello che scrivo con attenzione.
[QUOTE]
Ti assicuro di aver letto e riletto più volte.

[QUOTE]
Il codice lo postato prima,è sopra e ho messo pure i due casi.

E' il codice intero?



class Author < ActiveRecord::Base

validates_presence_of :name, :password
validates_uniqueness_of :name
validates_confirmation_of :password

has_many :messages
end # finisce la definizione della classe
def valid?
saved=Author.find_by_name(name)
return (saved and (password == saved.password))
end
# COSì FACENDO NON MI FUNZIONA IL METODO "LOGIN"

Sì dà il caso che al primo end la definizione della classe finisce (come ho già detto), quindi valid? è esterno ad essa. Per forza non ti funziona il metodo login (che non hai incollato, tra l'altro).



#SECONDO CASO
class Author < ActiveRecord::Base

validates_presence_of :name, :password
validates_uniqueness_of :name
validates_confirmation_of :password

has_many :messages

def valid?
saved=Author.find_by_name(name)
return (saved and (password == saved.password))
end
end

Qui è interno alla classe.
Ma come fai a dire che non funziona il metodo "new", dato che non ci sono chiamate a "valid?" ? Alla cui domanda (che ho già fatto), tu hai risposto


anke il metodo se io creo e salvo un oggetto lui mi entra cmq nella classe author e m và a controllare tutti i metodi compreso quello "valid",ke nn dovrebbe considerare ma lo fa

Con questo dici che facendo "Author.new" il metodo new non ti funziona; in che senso? ottieni errore? non ti crea l'oggetto?


Per quanto riguarda il sorgente,mi sono spiegato male hai ragione,volevo chiederti come modificarlo utilizzando la "ruby console" inclusa nel pacchetto instant rails che voi,nella guida,avete consigliato di scaricarmi.
Voi chi? Io non centro niente. :D



Lo so che si può fare con l'editor,ma sono dei file ".rb" e credo che sia meglio modificarli con la console,se si può.

Coooosa? Modificare i sorgenti dalla console? Di solito si programma scrivendo in un editor. :dottò:
"ruby script/console" non serve per modificare alcun che... carica una parte della tua applicazione rails per consentire di fare delle prove ed eseguire test con il codice scritto. Certamente, avendo a disposizione le classi di modello, puoi inserire record nel database tramite la creazione di nuovi oggetti (cioè record secondo la mappatura ORM) e la chiamata a save() (o direttamente con ClasseModello.create() ).

:master:

Loading