Forum: Italian Ruby user group Strano comportamento 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.
Antonio M. (Guest)
on 2009-05-11 18:23
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
Alessandro S. (Guest)
on 2009-05-11 23:05
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)"

:)
Antonio M. (Guest)
on 2009-05-12 09:55
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)"
>
> :)
Alessandro S. (Guest)
on 2009-05-12 11:55
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...
Salvatore (Guest)
on 2009-05-12 12:00
(Received via mailing list)
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)") ?
Antonio M. (Guest)
on 2009-05-13 17:21
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)") ?
Paolo M. (Guest)
on 2009-05-14 12:44
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)") ?
Antonio M. (Guest)
on 2009-05-22 12:02
> 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!
This topic is locked and can not be replied to.