# Strano comportamento controller

**URL:** <https://www.ruby-forum.com/t/strano-comportamento-controller/167689>\
**Category:** IT\
**Created:** [May 11, 2009, 4:23pm UTC](https://www.ruby-forum.com/t/strano-comportamento-controller/167689 "2009-05-11T16:23:25Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![atd](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/dc4da7/32.png) [@atd](https://www.ruby-forum.com/u/atd)\
**Post date:** [May 11, 2009, 4:23pm UTC](https://www.ruby-forum.com/t/strano-comportamento-controller/167689/1 "2009-05-11T16:23:25Z")

</div>

Ciao a tutti!  
Vi seguo da molto tempo ma non ho mai postato perchÃ¨ sono sempre  
riuscito a trovare soluzioni ai miei problemi su altri post.  
Per questo problema che ora vi espongo perÃ², alemno che non abbia  
guardato bene, non sono riuscito a venirne a capo.  
SarÃ sicuramente una stupidaggine ma…

Ho le seguenti tabelle:

patchpanels  
ethernetpatchpanelports  
fiberpatchpanelports

Quello che vorrei fare nel patchpanelscontroller Ã¨ il seguente:

ho un campo select dal quale posso scegliere se sono di fronte ad un  
patchpanel ethernet (E(Ethernet)) o ad un patchpanel fibra (F(Fiber)).  
Fin qua niente di anomalo.

Questo Ã¨ il controller:

class PatchpanelsController \< ApplicationController  
active\_scaffold :Patchpanel do |config|  
config.theme = :blue  
config.label = “Patch Panel”  
config.columns[:typology].form\_ui= :select  
config.list.columns = [:typology, :name, :descr, :ports, :rack,  
:uploads, :fiberopticcables, :ethernetpatchpanelports,  
:fiberpatchpanelports]  
config.list.sorting = { :name =\> :asc }  
config.create.columns = [:typology, :name, :descr,:date, :ports,  
:rack]  
config.update.columns = [:typology, :name, :descr,:date, :ports,  
:rack]  
config.show.columns = [:typology, :name, :descr, :date, :ports,  
:rack]  
end

def after\_create\_save(record)  
if params[:typology] = “E(Ethernet)”  
record.ports.times do |num|  
record.ethernetpatchpanelports.create(:position =\> num+1)  
end  
else  
record.ports.times do |num|  
record.fiberpatchpanelports.create(:position =\> num+1)  
end  
end  
end  
end

PerchÃ¨ se seleziono E(Ehernet) mi riempe la tabella  
ethernetpatchpanelports mentre se scelgo F(Fiber) continua sempre a  
riempirmi la solita tabella?

Premetto che a livello di relazioni fra i tre oggetti e tutto a posto.  
credo che sia una cazzata, ma non riesco a capire dove sbaglio.  
Ho la sensazione che il controllo sul campo typology, non venga  
effettuato o meglio che prenda sempre il primo come buono.

Sarei molto grato, se riusciste a risolvermi la questione.  
Fatemi sapere.  
Grazie in anticipo

---

<div class="post-metadata">

**Author:** ![atd](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/dc4da7/32.png) [@atd](https://www.ruby-forum.com/u/atd)\
**Post date:** [May 11, 2009, 9:05pm UTC](https://www.ruby-forum.com/t/strano-comportamento-controller/167689/2 "2009-05-11T21:05:34Z")

</div>

Antonio Mugnani wrote:

> def after\_create\_save(record)  
> if params[:typology] = “E(Ethernet)”  
> record.ports.times do |num|  
> record.ethernetpatchpanelports.create(:position =\> num+1)  
> end  
> else  
> record.ports.times do |num|  
> record.fiberpatchpanelports.create(:position =\> num+1)  
> end  
> end  
> end  
> end

prova a mettere

if params[:typology] == “E(Ethernet)”

🙂

---

<div class="post-metadata">

**Author:** ![atd](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/dc4da7/32.png) [@atd](https://www.ruby-forum.com/u/atd)\
**Post date:** [May 12, 2009, 7:55am UTC](https://www.ruby-forum.com/t/strano-comportamento-controller/167689/3 "2009-05-12T07:55:11Z")

</div>

Ho giÃ provato pensando che fosse un errore di sintassi ma il risultato  
Ã¨ il medesimo.  
Sembra ignorare il controllo o meglio per lui il confronto Ã¨ sempre  
falso ( anche se chiaramente gli do come tipologia E(Ethernet) e quindi  
mi fa sempre il solito ramo.  
Mentre se lascio come ho scritto, avviene il viceversa : il conforonto Ã¨  
sempre vero e quindi rende in considerazione solo il primo ramo ( anche  
se scelgo F(Fiber)).  
Non so se abbiate altri suggerimenti sempre ben apprezzati.  
Comunque grazie per ora.

Alessandro S. wrote:

> Antonio Mugnani wrote:
> 
> > def after\_create\_save(record)  
> > if params[:typology] = “E(Ethernet)”  
> > record.ports.times do |num|  
> > record.ethernetpatchpanelports.create(:position =\> num+1)  
> > end  
> > else  
> > record.ports.times do |num|  
> > record.fiberpatchpanelports.create(:position =\> num+1)  
> > end  
> > end  
> > end  
> > end
> 
> prova a mettere
> 
> if params[:typology] == “E(Ethernet)”
> 
> 🙂

---

<div class="post-metadata">

**Author:** ![atd](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/dc4da7/32.png) [@atd](https://www.ruby-forum.com/u/atd)\
**Post date:** [May 12, 2009, 9:55am UTC](https://www.ruby-forum.com/t/strano-comportamento-controller/167689/4 "2009-05-12T09:55:54Z")

</div>

if params[:typology] = “E(Ethernet)”

Ã¨ per forza sempre vero in quanto assegnamento e non confronto,  
quindi questa riga deve diventare:

if params[:typology] == “E(Ethernet)”

magari aggiungiti una  
puts params[:typology]  
e vedi che valore ha…

---

<div class="post-metadata">

**Author:** ![atd](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/dc4da7/32.png) [@atd](https://www.ruby-forum.com/u/atd)\
**Post date:** [May 13, 2009, 3:21pm UTC](https://www.ruby-forum.com/t/strano-comportamento-controller/167689/5 "2009-05-13T15:21:50Z")

</div>

Grazie dei consigli ma ho risolto in questo modo:

al posto di ‘if params[:typology] = “E(Ethernet)”’  
Ã¨ bastato mettere if record.typology = “E(Ethernet)”.

ora funziona alla grande.  
Comunque grazie a tutti

Salvatore wrote:

> Alessandro S. ha scritto:
> 
> > if params[:typology] = “E(Ethernet)”
> > 
> > ï¿½ per forza sempre vero in quanto assegnamento e non confronto,  
> > quindi questa riga deve diventare:
> > 
> > if params[:typology] == “E(Ethernet)”
> 
> hai provato if params[:typology].equal?(“E(Ethernet)”) ?

---

<div class="post-metadata">

**Author:** ![atd](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/dc4da7/32.png) [@atd](https://www.ruby-forum.com/u/atd)\
**Post date:** [May 12, 2009, 10:00am UTC](https://www.ruby-forum.com/t/strano-comportamento-controller/167689/6 "2009-05-12T10:00:38Z")

</div>

Alessandro S. ha scritto:

> if params[:typology] = “E(Ethernet)”
> 
> è per forza sempre vero in quanto assegnamento e non confronto,  
> quindi questa riga deve diventare:
> 
> if params[:typology] == “E(Ethernet)”

hai provato if params[:typology].equal?(“E(Ethernet)”) ?

---

<div class="post-metadata">

**Author:** ![atd](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/dc4da7/32.png) [@atd](https://www.ruby-forum.com/u/atd)\
**Post date:** [May 22, 2009, 10:02am UTC](https://www.ruby-forum.com/t/strano-comportamento-controller/167689/7 "2009-05-22T10:02:14Z")

</div>

> Quello che volevi scrivere Ã¨
> 
> if record.typology == “E(Ethernet)”
> 
> con due uguali (==).
> 
> In Ruby (e in C, e in Java, e in tanti altri linguaggi):
> 
> = assegna  
> == testa
> 
> Paolo
> 
> > Salvatore wrote:
> > 
> > > Alessandro S. ha scritto:
> > > 
> > > > if params[:typology] = “E(Ethernet)”
> > > > 
> > > > ï¿½ per forza sempre vero in quanto assegnamento e non confronto,  
> > > > quindi questa riga deve diventare:
> > > > 
> > > > if params[:typology] == “E(Ethernet)”
> > > 
> > > hai provato if params[:typology].equal?(“E(Ethernet)”) ?

Hai ragione Paolo!  
Ho sbagliato a scrivere io.  
In realtÃ (come Ã¨ chiaro che sia) Ã¨ un confronto e ci sono 2 uguali!  
Comunque grazie!

---

<div class="post-metadata">

**Author:** ![atd](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/dc4da7/32.png) [@atd](https://www.ruby-forum.com/u/atd)\
**Post date:** [May 14, 2009, 10:44am UTC](https://www.ruby-forum.com/t/strano-comportamento-controller/167689/8 "2009-05-14T10:44:55Z")

</div>

Antonio Mugnani wrote:

> Grazie dei consigli ma ho risolto in questo modo:
> 
> al posto di ‘if params[:typology] = “E(Ethernet)”’  
> Ã¨ bastato mettere if record.typology = “E(Ethernet)”.
> 
> ora funziona alla grande.  
> Comunque grazie a tutti

In realtÃ funziona sÃ¬ alla grande, ma funziona per caso e quindi avrai  
bug in seguito.

Come spiegavano quelli che ti hanno risposto prima di me, stai facendo  
un test su una condizione che Ã¨ sempre true. Rileggi con attenzione.

Hai scritto

if record.typology = “E(Ethernet)”

con un solo uguale. Quindi prima assegni la stringa a record.typology e  
poi testi quest’ultimo, che essendo inizializzato varrÃ sempre true. A  
questo punto puoi eliminare l’if e il tuo programma funzionerÃ allo  
stesso modo.

Quello che volevi scrivere Ã¨

if record.typology == “E(Ethernet)”

con due uguali (==).

In Ruby (e in C, e in Java, e in tanti altri linguaggi):

= assegna  
== testa

Paolo

> Salvatore wrote:
> 
> > Alessandro S. ha scritto:
> > 
> > > if params[:typology] = “E(Ethernet)”
> > > 
> > > ï¿½ per forza sempre vero in quanto assegnamento e non confronto,  
> > > quindi questa riga deve diventare:
> > > 
> > > if params[:typology] == “E(Ethernet)”
> > 
> > hai provato if params[:typology].equal?(“E(Ethernet)”) ?
