Strano comportamento controller


#1

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


#2

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)”

:slight_smile:


#3

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)”

:slight_smile:


#4

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…


#5

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)”) ?


#6

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)”) ?


#7

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!


#8

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)”) ?