Popolare partial attraverso link_to

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Ciao a tutti,
preso questo codice

Scheda Paziente

<%= debug(@patient) %> <%= debug(@vaccines) %>

<%= render :partial => ‘vaccines/all’ %>

<%= link_to “Popola Vaccines” , $$$ %>

dove in _all non faccio nient’altro che stampare il contenuto di
@vaccines.

Alla prima vista @vaccines e’ vuoto, ma cliccando su popola vaccines,
vorrei che si mandasse a un metodo (che non modifichi nulla) e che
faccia Vaccine.find(:all).
E’ banale ma non riesco: io ho definito nel controller un metodo (ogni
def del controller deve avere per forza una vista) che fa cio’, ma dopo
il click lui cerca di andare a /controller/def e non va bene, deve
semplicemente scrivere in quella variabile e basta.

Attendo ansiosamente


Matteo Buferli
WEB: http://www.buferli.com
PGP FINGERPRINT: B7C9 BE0A F77F 4747 56A2 87EC F6E5 8A01 65BB 58C1
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFIDkes9uWKAWW7WMERAtR7AJ0WQYESnFP+eZ6BLR3wcssi/fZF/QCeNi5d
9OPC2AriYreoP1WMbeKzhyE=
=V/Q+
-----END PGP SIGNATURE-----

Matteo Buferli wrote:

Scheda Paziente

<%= debug(@patient) %> <%= debug(@vaccines) %> <%= render :partial => 'vaccines/all' %> <%= link_to "Popola Vaccines" , $$$ %>

dove in _all non faccio nient’altro che stampare il contenuto di
@vaccines.
Alla prima vista @vaccines e’ vuoto, ma cliccando su popola vaccines,
vorrei che si mandasse a un metodo (che non modifichi nulla) e che
faccia Vaccine.find(:all).
E’ banale ma non riesco: io ho definito nel controller un metodo (ogni
def del controller deve avere per forza una vista) che fa cio’, ma dopo
il click lui cerca di andare a /controller/def e non va bene, deve
semplicemente scrivere in quella variabile e basta.

Attendo ansiosamente

Alla fine del tuo nuovo metodo, puoi far renderizzare di nuovo la stessa
pagina, tramite un
render :action=>’’

Ti rimarrebbe pero’ il link inutile “Popola Vaccines”, che potresti non
visualizzare se @vaccines e’ valorizzato ( dovrebbe esistere un metodo
link_to_unless )

In alternativa, puoi usare AJAX, sostituendo il “<%= render :partial =>
‘vaccines/all’ %>” con un div (es

) ed il link_to
con un link_to_remote (specificando :update=>‘vaccines’). La tua azione,
in questo caso, dopo aver valorizzato @vaccines, dovra’ renderizzare la
lista dei vaccini (puoi rinominare vaccines/_all.erb.html in
vaccines/all.erb.html e utilizzare questa view)

Ciao
Massimo

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

maner never wrote:

Alla prima vista @vaccines e’ vuoto, ma cliccando su popola vaccines,
pagina, tramite un
render :action=>‘’

Innanzitutto grazie mille per la risposta, ma mi sono rimasti ancora
alcuni dubbi:

il metodo che fa

def popola
@vaccines = Vaccine.find :all
render :action => paziente (la pagina attuale e’ paziente.html.erb)
end

dove lo devo scrivere? io ho provato nel controller dove ho definito il
metodo paziente, ma lui cerca di accedere a
/controller/popola
e mi ritorna errore.

Ciao
Massimo


Matteo Buferli
WEB: http://www.buferli.com
PGP FINGERPRINT: B7C9 BE0A F77F 4747 56A2 87EC F6E5 8A01 65BB 58C1
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFID1Du9uWKAWW7WMERAm4wAJ0XffjiHrGz3OtuLr6itn33akAp2QCcDS/5
cHBq6nwddeI8xtgFYA7Kl8Q=
=j/Nx
-----END PGP SIGNATURE-----

Matteo Buferli wrote:


Innanzitutto grazie mille per la risposta, ma mi sono rimasti ancora
alcuni dubbi:

il metodo che fa

def popola
@vaccines = Vaccine.find :all
render :action => paziente (la pagina attuale e’ paziente.html.erb)
end

dove lo devo scrivere? io ho provato nel controller dove ho definito il
metodo paziente, ma lui cerca di accedere a
/controller/popola
e mi ritorna errore.

Si, va bene nello stesso controller.che suppongo cosi:

class PazientiController < ApplicationController
def paziente
end

def popola
@vaccines = Vaccine.find :all
render :action => ‘paziente’
end
end

Il problema mi sa che e’ nel tuo strano link_to, con $$$ come parametro

Prova a cambiarlo cosi’:
<%= link_to “Popola Vaccines” , :action=>‘popola’ %>

Ciao Matteo,

Fermo restando gli ottimi suggerimenti già ricevuti,
potresti incapsulare il rendering dei vaccini in un helper

Scheda Paziente

<%= debug(@patient) %> <%= debug(@vaccines) %>

<%= show_vaccines(@patient, @vaccines) %>

L’helper sarebbe scritto così:

def show_vaccines(patient = nil, vaccines = nil)

if !patient.nil? and !vaccines.nil?
render :partial => …
else
link_to “Popola Vaccines”, :action => “popola”
end

end

Qualora, come presumo (in questo caso, quale sarebbe l’utilitÃ
dell’action “popola”?), ci fosse una relazione tra Patient e Vaccine,
l’helper avrebbe un unico parametro (il Patient).

L’action nel controller rimarrebbe come negli altri suggerimenti.

Spero di non aver detto fesserie e di essere stato utile.

Saluti,
Carmine

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

maner never wrote:

end

dove lo devo scrivere? io ho provato nel controller dove ho definito il
metodo paziente, ma lui cerca di accedere a
/controller/popola
e mi ritorna errore.

Si, va bene nello stesso controller.che suppongo cosi:

class PazientiController < ApplicationController
def paziente
@vaccines = []
@patient = Patient.find(params[:id])
Prova a cambiarlo cosi’:
<%= link_to “Popola Vaccines” , :action=>‘popola’ %>

Si con $$$ intendevo qualcosa di generico, perche’ non sapevo se potevo
metterlo nello stesso controller.

Ho notato che cosi facendo, dopo aver chiamato popola e aver
renderizzato paziente, perdo la variabile @patient nella “nuova”
paziente.

Ti ho editato il codice per farti capire come sono strutturate i miei
metodi.

Altra domanda, non posso in quel link_to fare si che richiami un metodo
definito nel model Vaccine ad esempio che prenda quella variabile e la
riempa al click? se si come posso fare per dire a link_to di chiamare un
metodo definito nel model di una classe su una data variabile??

Grazie ancora per la gentilezza.

Saluti.


Matteo Buferli
WEB: http://www.buferli.com
PGP FINGERPRINT: B7C9 BE0A F77F 4747 56A2 87EC F6E5 8A01 65BB 58C1
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFID2QB9uWKAWW7WMERAgHYAJ42ZSxCxzJBBCaKhehtBiszMiX8ZACfSGp4
gDYiIxCIeh2NahLwHQiSAiw=
=hBph
-----END PGP SIGNATURE-----

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Carmine M. wrote:

<%= show_vaccines(@patient, @vaccines) %>
end

Qualora, come presumo (in questo caso, quale sarebbe l’utilità
dell’action “popola”?), ci fosse una relazione tra Patient e Vaccine,
l’helper avrebbe un unico parametro (il Patient).

L’action nel controller rimarrebbe come negli altri suggerimenti.

Spero di non aver detto fesserie e di essere stato utile.

Saluti,
Carmine

Grazie ancora a tutti, ora provo subito.

Ti spiego la mia popola: patient e’ in relazione ‘molti a molti’ con
vaccine.
Sto facendo un form dove e’ possibile eventualmente aggiungere un
vaccino, ma siccome reputo inutile caricare tutti i possibili vaccini se
non si vuole esplicitamente aggiungere un vacino, sto cercando un
sistema che con un pulsante, riempa questa variabile definita come [] di
base.

Ora comunque provo le varie soluzione, se riscontro altri problemi mi
affido alla vostra grande esperienza e generosita’.

Grazie a tutti veramente.
Buona serata.


Matteo Buferli
WEB: http://www.buferli.com
PGP FINGERPRINT: B7C9 BE0A F77F 4747 56A2 87EC F6E5 8A01 65BB 58C1
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFID2G19uWKAWW7WMERAsPZAJ9OpNiTea5T8YwvJTkMSooeEhilhwCfRc8a
TUfv3UcWW+vDAV7U296OaKs=
=JNfw
-----END PGP SIGNATURE-----

Ho notato che cosi facendo, dopo aver chiamato popola e aver
renderizzato paziente, perdo la variabile @patient nella “nuova”
paziente.

Ti ho editato il codice per farti capire come sono strutturate i miei
metodi.

Altra domanda, non posso in quel link_to fare si che richiami un metodo
definito nel model Vaccine ad esempio che prenda quella variabile e la
riempa al click? se si come posso fare per dire a link_to di chiamare un
metodo definito nel model di una classe su una data variabile??

Rispondo di fretta. Cosi’ dovrebbe funzionare

<%= link_to “Popola Vaccines” , :action=>‘popola’, :id=> @patient %>

def popola
@vaccines = Vaccine.find :all
@patient=Patient.find(params[:id])
render :action => paziente (la pagina attuale e’ paziente.html.erb)
end