Nuovo su rails: visualizzare gli errori


#1

Ciao
sto facendo un po di pratica cohn rails.
ho visto che utilizzando il generatore scaffloid quando c’e’ una form
per valorizzare un modello, gli errori emersi dalla validazione vengono
visualizzati coilorando la texfield di rosso.
lo scafloid usa form_for.

io vorrei ottenere lo stesso effetto utilizzando una form qualsiasi
(form_tag)
ma non so come fare.

Sapete indicarmi voi come?
oppure se c’e’ un qualche esempio su qualche sito…

Grazie
Ciao
Alessandro


#2

On Mon, 2009-01-26 at 23:43 +0100, Alessandro A. wrote:

Sapete indicarmi voi come?
oppure se c’e’ un qualche esempio su qualche sito…

Grazie
Ciao
Alessandro

se vuoi visualizzare tutti gli errori devi usare error_messages_for
http://api.rubyonrails.org/classes/ActionView/Helpers/ActiveRecordHelper.html#M001474

claudio


#3

Claudio F. wrote:

On Mon, 2009-01-26 at 23:43 +0100, Alessandro A. wrote:

se vuoi visualizzare tutti gli errori devi usare error_messages_for
http://api.rubyonrails.org/classes/ActionView/Helpers/ActiveRecordHelper.html#M001474

claudio

Ci ho provato ma senza successo…
credo di sbagliare qualcosa a monte:

io nella view metto

<% form_tag(:controller=> “bookmarks”, :action => “create”) do%>
<%= error_messages_for “bookmark”, :object => @bookmark %>

    <p>
      Name:   <%= text_field_tag 'name', @bookmark.name  %>
    </p>

nel model

validates_presence_of :name

nel controller:

def create
@bookmark = Bookmark.new
@bookmark.name = params[:name]
if @bookmark.save
flash[:notice] = ‘Tutto ok.’
redirect_to(:action => “list”)
else
flash[:error] = ‘Errore.’
redirect_to :back
end
end

quando non inserisco il name va in errore (vedo il flash error) ma non
vedo nessun altro messaggio.

credo di sbagliare qualcosa o nella form o nel controller…
ho anche provato a fare una redirect alla action new ma è peggio…

avete qualche idea?

Grazie Ciao
alessandro


#4

Alessandro A. wrote:

Claudio F. wrote:

On Mon, 2009-01-26 at 23:43 +0100, Alessandro A. wrote:

se vuoi visualizzare tutti gli errori devi usare error_messages_for
http://api.rubyonrails.org/classes/ActionView/Helpers/ActiveRecordHelper.html#M001474

claudio

Ci ho provato ma senza successo…
credo di sbagliare qualcosa a monte:

ho fatto dei passi avanti: nel controller invece di mettere redirect_to
:back
ho usato render… sulla stessa pagina.
in pratica ho una pagina che si chiama new in cui c’e’ la mia form, e la
rispettiva action new. nella submit associo una action create, che se
fallisce fa la render di new.
tutto ok solo che nell’action new caricavo dei dati per una combo che
sono ricostretto a ricaricare in caso di fallimento della create (posso
evitarlo questo?).

ad ogni modo facendo cosi’ riesco a visualizzare gli errori.

ancora una domanda:
guardando la documentazione che mi ha linkato claudio (grazie, fra
l’altro) ho visto che c’e’ anche

error_message_on

che mi sembra ancora più adatto ai miei gusti, ovvero a me non piace
molto avere il box con tutti gli errori, ma preferisco una piccola icona
di errore con tooltip indicante il messaggio vicino alla input errata e
error_message_on restituisce proprio il singolo messaggio.
il “problema” è che me lo restituisce in un div, e questo fa si che vada
a capo rispetto alla input.

ho pensato (ma non ancora provato) di fare cosi’, prendere il sorgente
di error_message_on e banalmente sostituire il div con uno span.

è una prassi comune? secondo voi potrebbero esserci controindicazioni?

Grazie, ciao
Alessandro


#5

Pietro G. wrote:

2009/1/30 Alessandro A. removed_email_address@domain.invalid:

ho fatto dei passi avanti: nel controller invece di mettere redirect_to
:back
ho usato render… sulla stessa pagina.
in pratica ho una pagina che si chiama new in cui c’e’ la mia form, e la
rispettiva action new. nella submit associo una action create, che se
fallisce fa la render di new.
tutto ok solo che nell’action new caricavo dei dati per una combo che
sono ricostretto a ricaricare in caso di fallimento della create (posso
evitarlo questo?).

potresti mostrarci pi� in dettaglio i metodi new e create del controller?

vado un po’ a memoria (non ho sotto mano il codice)
la new fa qualcosa tipo

def new
@bookmark = Bookmark.new
@dati_combo = Tipologia.find(:all)
end

per la create ho solo aggiunto di nuovo
@dati_combo = Tipologia.find(:all)
prima di fare la render

ah, ma soprattutto: perch� stai usando i metodi field_tag?
soprattutto perchè sono alle primissime armi, e avevo capito che si
devono usare quelli se si usa form_tag. Se invece uso form_for allora
posso usare gli altri… (mi sa che ho capito male…)

tu cosa useresti?

in questo caso non avevo usato form_for perchè i vari input vanno su
diversi modelli (ma anche qui forse sto sbagliando a monte, meglio che
una form aggiorni solo un modello e gli eventuali modelli associati
tramite relazioni)

error_message_on
[…]
il “problema” � che me lo restituisce in un div, e questo fa si che vada
a capo rispetto alla input.
ho pensato (ma non ancora provato) di fare cosi’, prendere il sorgente
di error_message_on e banalmente sostituire il div con uno span.

potresti cambiare lo stile del div.

display: inline

dovrebbe andare.

ok, sono alle prime armi anche sui css… (che vergogna…)

Grazie!!!


#6

Il 30 gennaio 2009 11.44, Alessandro A. removed_email_address@domain.invalid ha
scritto:

tramite relazioni)
http://railscasts.com/episodes/75

all’interno di form_for puoi usare fields_for, rendendo anche più
leggibile il codice.

un consiglio: dai un’occhiata alla lista degli episodi di railscasts,
a me hanno cambiato la vita.


#7

Alessandro A. wrote:

il “problema” � che me lo restituisce in un div, e questo fa si che vada
a capo rispetto alla input.
ho pensato (ma non ancora provato) di fare cosi’, prendere il sorgente
di error_message_on e banalmente sostituire il div con uno span.

potresti cambiare lo stile del div.

display: inline

dovrebbe andare.

Ho provato, ma va a capo lo stesso…
ho fatto in application_helper il metodo error_message_on_inline intutto
e per tutto identico a error_message_on sostituendo span a div e
funziona alla grande.

Grazie

ciao


#8

2009/1/30 Alessandro A. removed_email_address@domain.invalid:

ho fatto dei passi avanti: nel controller invece di mettere redirect_to
:back
ho usato render… sulla stessa pagina.
in pratica ho una pagina che si chiama new in cui c’e’ la mia form, e la
rispettiva action new. nella submit associo una action create, che se
fallisce fa la render di new.
tutto ok solo che nell’action new caricavo dei dati per una combo che
sono ricostretto a ricaricare in caso di fallimento della create (posso
evitarlo questo?).

potresti mostrarci più in dettaglio i metodi new e create del controller?

ah, ma soprattutto: perché stai usando i metodi field_tag?

error_message_on
[…]
il “problema” è che me lo restituisce in un div, e questo fa si che vada
a capo rispetto alla input.
ho pensato (ma non ancora provato) di fare cosi’, prendere il sorgente
di error_message_on e banalmente sostituire il div con uno span.

potresti cambiare lo stile del div.

display: inline

dovrebbe andare.


#9

Pietro G. wrote:

Il 30 gennaio 2009 11.44, Alessandro A. removed_email_address@domain.invalid ha
scritto:

tramite relazioni)
http://railscasts.com/episodes/75

all’interno di form_for puoi usare fields_for, rendendo anche più
leggibile il codice.

un consiglio: dai un’occhiata alla lista degli episodi di railscasts,
a me hanno cambiato la vita.

grazie del consiglio.
lo guardero’…