Gestione campi maschere upd

Ho ereditato una procedura RoR utilizzante ActiveScaffold.
Tralascio le impressioni sull’utilizzo di questo plug-in, ma sarebbe
interessante, non conoscendo molto Rails, come posso modificare gli
attributi di un campo in una maschera di update, in funzione del valore
immesso in un campo precedente.

Devo agire sugli helper? Utilizzare una view (che comunque non credo sia
possibile, dal momento che utilizzo AS)?

Dalla documentazione letta, non trovo alcun riferimento agli attributi
dei campi.

Ogni risposta, anche se scontata e negativa sulla fattibilità è
accettata.

Grazie.

Paolo A.

Ti ringrazio per la risposta. Mi dà un pò di speranza per riuscire a
risolvere il problema, anche se di Javascript non ne so nulla … e ‘Il
codice della callback della observe avrebbe poi fatto una richiesta Ajax
a Rails per aggiornare i
menu degli altri campi.’ mi rimane oscura come frase.
Non resta che rimboccarsi le maniche e provare.!!!

A proposito: la gestione degli eventi (onClick, onFocus …) su un
campo, può essere implementata con Ruby, si deve passare attraverso
Javascript … o semplicemente non si può?

Grazie.

PaoloA

Stavo per dover fare la stessa cosa in settimana ma poi mi sono
accordato con il cliente per un approccio differente. Avevo però
iniziato a pensarci ed il piano era di gestirlo con Javascript, con un
Event.observe sul campo da monitorare. Il codice della callback della
observe avrebbe poi fatto una richiesta Ajax a Rails per aggiornare i
menu degli altri campi.

Se vuoi usare gli helper, credo che si tratti di observe_field()

Paolo A. wrote:

Ho ereditato una procedura RoR utilizzante ActiveScaffold.
Tralascio le impressioni sull’utilizzo di questo plug-in, ma sarebbe
interessante, non conoscendo molto Rails, come posso modificare gli
attributi di un campo in una maschera di update, in funzione del valore
immesso in un campo precedente.

Devo agire sugli helper? Utilizzare una view (che comunque non credo sia
possibile, dal momento che utilizzo AS)?

Si può modificare tutto anche con ActiveScaffold. Ad esempio, se vuoi
personalizzare l’elenco dei record di un modello, devi prendere il file

vendor/plugins/active_scaffold/frontends/default/views/list.rhtml

e copiarlo in

app/views/modello/list.rhtml

e poi modificarlo a piacere.

La versione in views ha la precedenza sul default nella directory del
plugin.

Allo stesso modo puoi personalizzare qualsiasi altro template di AS. Mi
pare che se copi un .rhtml in app/views/layouts vai a stabilire un nuovo
default per tutta l’applicazione.

Dalla documentazione letta, non trovo alcun riferimento agli attributi
dei campi.

Ogni risposta, anche se scontata e negativa sulla fattibilità è
accettata.

Grazie.

Paolo A.

Spero di esserti stato almeno un po’ d’aiuto, ma fammi sapere come va a
finire perché in futuro potrebbe tornarmi utile.

Ciao
Paolo

Grazie per le info … ne approfitto, dal momento che si tratta di
prendere decisioni che implicano una certa spesa in termini di
tempistiche per produrre risultati.
Da quanto capisco devo per forza digerirmi javascript, ma c’è qualcuno
che ha utilizzato gli helper?
Qual’è la differenza tra i due metodi?
Se uso solo Javascript, ‘annego’ il codice JS nelle view (vedo, tra
l’altro, che qualcosa il mio predecessore ha già fatto … a parte il
discorso di capire ‘cosa’ ha fatto).
Se utilizzo la tecnica degli helper? Non ho alcun esempio di utilizzo e
non trovo nessun documento che mi aiuti a gestire l’evento relativo alla
modifica di un campo.

Grazie.

Paolo

A proposito: la gestione degli eventi (onClick, onFocus …) su un
campo, può essere implementata con Ruby, si deve passare attraverso
Javascript … o semplicemente non si può?

Grazie.

PaoloA

Senza dubbio si passa da javascript perchè sono suoi metodi, lo puoi
fare utilizzando javascript direttamente (anche se non proprio
direttamente ma con prototype o simili) o con gli helper di rails però
…(sarà che non li uso molto e quindi ho poca praticità ) preferisco la
prima soluzione anche perchè qualche helper esagera riempiendo i tag con
molto codice, per carità necessario per lo scopo che deve compiere ma
spesso si può evitare cambiando il metodo.

Per il tuo problema io eviterei di impazzire lato javascript ma andrei a
clonare la pagina che vuoi diversificare come ti ha spiegato già l’amico
Paolo. Oppure la togli da AS, fai lo scaffold normale così da poter fare
le personalizzazioni.
Certo è un lavoraccio, brutto come la scelta di utilizzare uno scaffold
dinamico come AS per scopi diversi dal back end.

Ciao Paolo,

mi sembra di capire che devi andare a rilevare se un campo viene
modificato in modo da aggiornarne degli altri,

se la tua necessità è questa allora puoi utilizzare helper del tipo:

observe_field: osserva un campo e quando questo viene modificato ti
permette di chiamare in asincrono un’azione rails che può andare ad
aggiorrnare 1 o più elementi html
observe_form: come sopra ma osserva tutti i campi della form

Nel mio caso verifico ogni 2 decimi di secondo se un campo viene
modificato, se succede allora richiamo una azione rails passando il
valore della modifica (id) all’azione my_availabilities_change_room:

  <%= observe_field "room_id",
                    :url       => { :action =>

“my_availabilities_change_room” },
:update => “”,
:frequency => 0.2,
:with => “‘id=’ + value” %>

In questo caso update viene impostato vuoto perchè il codice della
action si arrangia ad aggiornare il contenuto degli altri campi:
es. l’azione my_availabilities_change_room carica tutto il necessario
(@price, @weekend_price, @availability) utilizzando params[:id] che
viene passato dall’observer e poi sviluppa l’unica view che è definita
con estensione .rjs (non devi quindi creare una view .rhtml !!!):

my_availabilities_change_room.rjs

page.replace_html “price_input”, text_field_tag(“price”,
price_for_input(@price)) + " " + Currency.active.name
page.replace_html “weekend_price_input”, text_field_tag(“weekend_price”,
price_for_input(@weekend_price)) + " " + Currency.active.name
page.replace_html “availability_input”, text_field_tag(“availability”,
@availability)

Spero che ti possa essere di aiuto.

Buona giornata.

Tex

… forse la risposta di questa mattina non l’ho spedita … ci riprovo.

Grazie Gianluca per le info e grazie anche agli altri.
Ho dato un’occhiata a Javascript ieri, ed oggi voglio provare il metodo
degli helper.
Se capisco bene, creo un nome_campocolonna_helper.rhtml.
All’interno inserisco l’istruzione ‘observe’ (come se fosse un documento
html? quali tag?) che richiama nome_funzione.
Creo un file nome_funzione.rjs in /app/view nella quale posso gestire il
codice con Ruby.
Il mio intento, però è di scegliere un valore di un campo con lista a
tendina, e, in funzione del valore scelto, rendere read-only op.
editabili altri campi presenti sulla stessa maschera, con ovvio reflesh
per visualizzare le modifiche ogni volta cambio valore al campo_scelta.

Abbiate pazienza, ma come dicevo ho ereditato questa procedura, ma
provengo da un’esperienza professionale legata ad asm e c su
microprocessori! E’ vero che questo lavoro è una bella sfida, ma è
altrettanto vero che è un modo di sviluppare e ‘pensare’ al problema
decisamente molto lontano.
Grazie.

Paolo.

Al di là di quello che ho scritto prima, non riesco a capire in quale
file inserisco ‘observe’.
Ho notato che, dopo aver scelto il link ‘Modifica’ dalla lista che
ActiveScaffold fa, viene richiamato il file _form_attribute.rhtml, tante
volte quante sono i campi.
Ho copiato questo file in /app/view, in modo che abbia la precedenza, ma
non riesco ad intercettare il campo che mi interessa. Come posso
visualizzare con un ‘alert’ JS il campo all’interno del ciclo?
Questo è il file:

<% scope ||= nil %>

"><%= column.label %>
<%= active_scaffold_input_for column, scope %> <% if column.description -%> <%= column.description %> <% end -%>

Se metto alla fine

riesco a vedere il msg ogni volta che viene caricato un campo.

Ma se lo sposto all’interno del ciclo, non ne ricavo nulla. Anzi il msg
proprio non si vede, anche se la maschera continua ad essere
visualizzata.

Ma non credo sia questo il file interessato dall’observe!

Paolo

(Riporto quanto già scritto in altra discussione.)

… problema risolto.
Ho buttato via Active Scaffold, ed ho gestito a manina i metodi
‘Aggiungi’ e ‘Modifica’.

In questo modo, ho approfondito l’utilizzo di Ruby e la filosofia di
Rails, risolvendo i problemi con la vecchia ma sempre valida scrittura
del codice riga per riga, che permette di avere sotto controllo quello
che si sta facendo, senza demandare ad alcuno o alcunchè il risultato,
dopo la solita attenta analisi.

Non mi considero certo un esperto con RoR, ma quel poco di esperienza
fatta, la condividerò certamente.

Grazie comunque a coloro che mi hanno dato suggerimenti.

PaoloA.

Paolo A. wrote:

Al di là di quello che ho scritto prima, non riesco a capire in quale
file inserisco ‘observe’.

Non ho mai usato questo helper, ma così come gli altri di questo tipo
quel che fa è generare del codice javascript. Perché funzioni deve stare
nella pagina html in cui ci sono i campi da osservare e quindi lo devi
mettere nella view di AS che viene usata per modificare il record,
meglio se in fondo.

Ho notato che, dopo aver scelto il link ‘Modifica’ dalla lista che
ActiveScaffold fa, viene richiamato il file _form_attribute.rhtml, tante
volte quante sono i campi.
Ho copiato questo file in /app/view, in modo che abbia la precedenza, ma
non riesco ad intercettare il campo che mi interessa.

Devi trovare il modo di risalire all’id del campo per poi impostarlo
nell’helper. Ti consiglio di cercarlo nel sorgente html della pagina,
meglio se usando Firebug così ci clicchi sopra e vedi subito il codice
senza impazzire a cercarlo a mano.

Ciao
Paolo