Forum: Italian Ruby user group Passare parametri da vista a controller.

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
0c7048451c5f5350c6e6332ffdc7cffe?d=identicon&s=25 Lucea (Guest)
on 2007-07-03 11:04
(Received via mailing list)
Salve a tutti, ho un problema: vorrei passare un parametro da una vista
a un
controller. Per fare questo ho usato le variabili di istanza in questo
modo:

CONTROLLER

@aule = Soluzione.find   (:all,
        :conditions => ["soluzioni.a_id = ?",params[:id]])

@soluzioni = Soluzione.find( :all,
           :conditions => ["a_id = ? and aula_id= ?",params[:id],
@aula.id])


VISTA
<% for @aula in @aule %>
...
  <% for soluzione in @soluzioni %>
     <%= soluzione.id %>
   <% end %>
...
<% end %>


L'errore che mi viene dato è questo:

Called id for nil, which would mistakenly be 4 -- if you really wanted
the id of nil, use object_id


Il problema è dato da @aula.id, ma non so per quale motivo. Probabilmente
non sto passando il parametro nel modo giusto, ma qual è quello giusto?
Se qualcuno sa illuminarmi ... :)
Grazie!
Cbe503ad4dc0a47353b8dd04ea77a9fb?d=identicon&s=25 Stefano Guglielmetti (Guest)
on 2007-07-03 11:14
(Received via mailing list)
Che tipo di relazione hanno aule e soluzioni?
73d7c6e24b8b321a0bb1d9f2a4fcdf9a?d=identicon&s=25 tarini (Guest)
on 2007-07-03 11:27
(Received via mailing list)
sbaglio o il subject della mail dovrebbe essere "... dal controller alla
vista..." ??

Il 03/07/07, Stefano Guglielmetti <StefanoG@interact.it> ha scritto:
> Salve a tutti, ho un problema: vorrei passare un parametro da una vista a
>                              :conditions => ["a_id = ? and aula_id=
> <% end %>
> Se qualcuno sa illuminarmi ... :)
> Grazie!
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away
18bd7c6669193d3dd0030d77854b6248?d=identicon&s=25 Matteo Collina (Guest)
on 2007-07-03 11:29
(Received via mailing list)
Il 03/07/07, Lucea <lucea85@gmail.com> ha scritto:
>
> Called id for nil, which would mistakenly be 4 -- if you really wanted
> the id of nil, use object_id
>
>
> Il problema è dato da @aula.id, ma non so per quale motivo. Probabilmente
> non sto passando il parametro nel modo giusto, ma qual è quello giusto?
> Se qualcuno sa illuminarmi ... :)
> Grazie!


Immaginando che la riga che dia eccezione sia:

@soluzioni = Soluzione.find( :all,
                            :conditions => ["a_id = ? and aula_id=
?",params[:id], @aula.id])

la risposta ovvia è che @aula non è inizializzato, contiene nil. E quindi
Ruby si arrabbia e solleva un'eccezione. Dov'è inizializzato @aula?

Matteo

Matteo
0c7048451c5f5350c6e6332ffdc7cffe?d=identicon&s=25 Lucea (Guest)
on 2007-07-03 11:35
(Received via mailing list)
stefano: 1 a molti (un'aula può essere in più soluzioni)

tarini: no, vorrei proprio passare i parametri dalla vista al controller

matteo: aula prende (dovrebbe prendere...) il valore che vorrei passare
nella vista! con il ciclo ( for @aula in @aule )
18bd7c6669193d3dd0030d77854b6248?d=identicon&s=25 Matteo Collina (Guest)
on 2007-07-03 11:45
(Received via mailing list)
Il 03/07/07, Lucea <lucea85@gmail.com> ha scritto:
>
> stefano: 1 a molti (un'aula può essere in più soluzioni)
>
> tarini: no, vorrei proprio passare i parametri dalla vista al controller
>
> matteo: aula prende (dovrebbe prendere...) il valore che vorrei passare
> nella vista! con il ciclo ( for @aula in @aule )
>

Vediamo di capire un attimo. All'interno di una singola azione, la vista
viene valutata *dopo* il metodo del controller, quindi è impossibile
passare
parametri dalla vista al controller. Detto questo immagino tu voglia
passare
un parametro da un'azione ad un'altra, giusto?
0c7048451c5f5350c6e6332ffdc7cffe?d=identicon&s=25 Lucea (Guest)
on 2007-07-03 12:02
(Received via mailing list)
Ehm.. no.
A me servono le righe contenute in @aule una alla volta (che volevo
estrarre
con il ciclo for ottenendo così @aula), poiché nel controller devo elaborare
ogni riga (@aula) e poi ripassarla alla vista, per visualizzare i
risultati
ottenuti.

Da quanto mi dici però questo non è possibile (emmenomale che me l'avete
detto che altrimenti io rimanevo qui a far notte).

Quindi suppongo di dover usare direttamente la variabile @aule che ho
nel
controller.
Solo che in questo modo quando andrò a elaborare ogni riga di @aule, dovrò
memorizzare TUTTI i risultati ottenuti per ogni riga prima di inviarli
alla
vista.

Giusto?
18bd7c6669193d3dd0030d77854b6248?d=identicon&s=25 Matteo Collina (Guest)
on 2007-07-03 12:12
(Received via mailing list)
Il 03/07/07, Lucea <lucea85@gmail.com> ha scritto:
> Da quanto mi dici però questo non è possibile (emmenomale che me l'avete
> detto che altrimenti io rimanevo qui a far notte).
>
> Quindi suppongo di dover usare direttamente la variabile @aule che ho nel
> controller.
> Solo che in questo modo quando andrò a elaborare ogni riga di @aule, dovrò
> memorizzare TUTTI i risultati ottenuti per ogni riga prima di inviarli
> alla
> vista.
>
> Giusto?


Sì esatto, ma questo rientra nella normale logica MVC :). Nel controller
prepari quello che poi dovrai visualizzare nella vista.
Comunque devi ragionare a Oggetti e non a Righe. Un modello è più di una
semplice "riga". Può avere metodi e normalmente tutte le operazioni che
sono
relative ai suoi dati vengono appunto realizzate in questo modo.
Non pensare al database quando progetti la tua applicazione, pensa ai
modelli, ai flussi di interazione.
Spero di esserti stato d'aiuto
Matteo
0c7048451c5f5350c6e6332ffdc7cffe?d=identicon&s=25 Lucea (Guest)
on 2007-07-03 12:38
(Received via mailing list)
Vedrò cosa riesco a fare... Grazie per l'aiuto :)
Cbe503ad4dc0a47353b8dd04ea77a9fb?d=identicon&s=25 Stefano Guglielmetti (Guest)
on 2007-07-03 13:58
(Received via mailing list)
La soluzione canonica al tuo problema è questa:

DATABASE:

Tabella aule: (o aulee dipende dall'inflessione che usi)

Id
Campo..
Campo..
Campo..

Tabella Soluzioni

Id
Aula_id
Campo...
Campo..
Campo...


ENVIROINMENT.RB
# Add new inflection rules using the following format
# (all these examples are active by default):
Inflector.inflections do |inflect|
   inflect.irregular 'aula', 'aule' #oppure aulee
   inflect.irregular 'soluzione', 'soluzioni' #oppure aulee
End


MODEL Aula.rb

class Aula < ActiveRecord::Base

  has_many :soluzioni

End



MODEL Soluzione.rb

class Aula < ActiveRecord::Base

  belongs_to :aula

End




CONTROLLER


@aula = Aula.find (:first, :conditions => ["id = ?",params[:id]]) #<---
devi passare l'id dell'aula selezionata

VIEW

<% for soluzione in @aula.soluzioni %>
   <%= soluzione.id %>
<% end %>





Ad ogni modo non ho capito perché cicli le aulee... Ovvero, se vuoi
selezionare piu aulee, quale è il critero? Dici che un'aula può essere in piu
soluzioni, ma cosi come ho capito io una soluzione può essere in una sola
aula (uno a molti e non molti a molti)

jeko
0c7048451c5f5350c6e6332ffdc7cffe?d=identicon&s=25 Lucea (Guest)
on 2007-07-03 15:07
(Received via mailing list)
On 7/3/07, Stefano Guglielmetti <StefanoG@interact.it> wrote:
>
>
> ENVIROINMENT.RB
> # Add new inflection rules using the following format
> # (all these examples are active by default):
> Inflector.inflections do |inflect|
>    inflect.irregular 'aula', 'aule' #oppure aulee
>    inflect.irregular 'soluzione', 'soluzioni' #oppure aulee
> End


ho fatto giusto :)

MODEL Aula.rb
>
> class Soluzione < ActiveRecord::Base
>
>   belongs_to :aula
>
> End


ho fatto giusto :)

CONTROLLER
>
>
> @aula = Aula.find (:first, :conditions => ["id = ?",params[:id]]) #<---
> devi passare l'id dell'aula selezionata
>
> VIEW
>
> <% for soluzione in @aula.soluzioni %>
>         <%= soluzione.id %>
> <% end %>


allora io ho
@aule
che è l'insieme soluzioni per le aule che mi servono (già filtrate in base a
parametri passati alla action)

io devo fare delle operazioni(non banali) in ogni soluzione appartenente
a
@aule, non in una soltanto, poi devo memorizzare i risultati di tali
operazioni in una struttura (un hash nel mio caso) e passare tutto alla
vista per visualizzare i risultati.

per fare questo ho trovato questo metodo (@aule ce l'avevo già
precedentemente, mi serve così com'è per fare altre cose):

    @aule = Soluzione.find      (:all,
                                  :joins => "as s INNER JOIN
codificaaule on
s.codificaaula_id = codificaaule.id",
                                  :conditions => ["s.periododidattico_id
=
?",params[:id]],
                                  :order => "codificaaule.fullname",
                                  :group => "codificaaule.fullname")

     @hsh = Hash.new
     for aula in @aule

         #soluzioni corrispondenti all'aula e al periodo didattico
passati
per parametro
         @sol = Soluzione.find( :all,
                                      :conditions =>
["periododidattico_id =
? and codificaaula_id= ?",params[:id], aula.id])

        ris=....
        @hsh[aula.id]=ris
     end


Non mi convince il ciclo for, ma funziona. C'è un modo per calcolare @sol
senza usare il ciclo?

Ad ogni modo non ho capito perché cicli le aulee... Ovvero, se vuoi
> selezionare piu aulee, quale è il critero? Dici che un'aula può essere in
> piu soluzioni, ma cosi come ho capito io una soluzione può essere in una
> sola aula (uno a molti e non molti a molti)


esatto uno a molti.. un'aula è in più soluzioni... una soluzione può avere
una sola aula...
Cbe503ad4dc0a47353b8dd04ea77a9fb?d=identicon&s=25 Stefano Guglielmetti (Guest)
on 2007-07-03 15:33
(Received via mailing list)
Beh per come l'hai posta te, direi che è senza dubbio una soluzine al
problema :-)

Ma ti faccio una domanda indiscreta: come mai non gestisci anche
codificaaule e periododidattico con ActiveRecord, in modo da non dover
usare a mano i join?

jek
0c7048451c5f5350c6e6332ffdc7cffe?d=identicon&s=25 Lucea (Guest)
on 2007-07-03 15:37
(Received via mailing list)
non lo so :D
è che non ci ho proprio pensato :)
l'ho fatto nel modo in cui mi veniva più naturale; però adesso so che c'è un
altro modo, quindi vedrò di sfruttarlo.
grazie mille

Silvia
Cbe503ad4dc0a47353b8dd04ea77a9fb?d=identicon&s=25 Stefano Guglielmetti (Guest)
on 2007-07-03 15:59
(Received via mailing list)
Si cerca di usare ActiveRecord per gestire tutto lo strato della
persistenza dei dati. Cosi poi muoverti diventa molto piu facile, e
l'SQL te lo scordi proprio! (il giorno che lo farai te lo segni sul
calendario e cosi poi festeggi la tua festa della liberazione ;-) )

jek
This topic is locked and can not be replied to.