Forum: Italian Ruby user group modificare un record da controller diversi

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.
A8d20956326fa9db0f7bf9feb5856d11?d=identicon&s=25 Mammaorsa Dj (mammaorsadj)
on 2009-02-08 18:00
Ciao a tutti,
ho iniziato da poco a creare una webapp in RoR per gestire il workflow
degli ordini di produzione che ho in azienda.
I cicli di produzione vengono caricati dall'utente A, quindi l'utente B
indica l'inizio e la fine delle lavorazioni.

Creo un modello "ciclo.rb" in cui gestisco, mediante scaffolding,
l'inserimento e modifica dei cicli di produzione da parte dell'utente A
(il controller è "ciclos_controller.rb").
Per l'utente B, ho generato il controller "officina_controller.rb", con
homepage "index", in cui ho:

                      ________
 Ciclo no. :  |_______|      ( Pulsante:  "INIZIA" )


la view è:

<% form_tag(:action => :inizia_odp) do %>
<table align="center">
<tr>
<td align="right"> Ciclo no.: </td>
 <td align="left">
<%= text_field_tag :ciclo_officina, params[:ciclo_officina] %>

<%= submit_tag "Inizia" %> </td>

</tr>
<% end %>


l'utente B inserisce il numero del ciclo, il controller officina riporta

def inizia_odp
  @ciclo = Ciclo.find(:first, :conditions => ["odp like ?",
params[:ciclo_officina]])
  @ciclo.iniziato = Date::today

 end

quindi nel template "inizia_odp" vengono mostrati i campi del record
modificato (la data di inizio compare correttamente)

PROBLEMA: tornando alla home page contenente l'elenco di tutti i cicli
in produzione, la riga corrispondente al ciclo appena modificato riporta
il campo "data_inizio" vuota.

Sapete dirmi come faccio a modificare i record dello stasso modello da
due controller diversi?
grazie mille
Antonio
7de465f222e6a9c7fe658e370d0bfe05?d=identicon&s=25 Paolo Montrasio (pmontrasio)
on 2009-02-08 18:15
Mammaorsa Dj wrote:
> def inizia_odp
>   @ciclo = Ciclo.find(:first, :conditions => ["odp like ?",
> params[:ciclo_officina]])
>   @ciclo.iniziato = Date::today
>
>  end
>
> PROBLEMA: tornando alla home page contenente l'elenco di tutti i cicli
> in produzione, la riga corrispondente al ciclo appena modificato riporta
> il campo "data_inizio" vuota.

La soluzione è semplice: devi ricordarti di salvare il record
modificato, ad esempio con @ciclo.save

Nella view infatti vedi il record aggiornato perché hai modificato la
copia caricata in memoria (@ciclo), ma Rails non salva automaticamente
le modifiche che fai ai dati.

> Sapete dirmi come faccio a modificare i record dello stasso modello da
> due controller diversi?

Puoi lavorare su qualsiasi modello da qualsiasi controller, il quiproquo
era la mancanza della save.

Paolo
A8d20956326fa9db0f7bf9feb5856d11?d=identicon&s=25 Mammaorsa Dj (mammaorsadj)
on 2009-02-08 19:02
GRAZIE MILLE

Non riesco ancora a "pensare" come rails, le "magics" di cui tante guide
parlano  in realtà hanno dei fondamenti nascosti, come questa di
visualizzare il record modificato nella mia view, che faccio ancora
fatica a mettermi in testa...

Grazie ancora
Antonio
24035e6fafa4c747fa9c8f2e9b39c6fd?d=identicon&s=25 Andrea Campi (Guest)
on 2009-02-09 09:47
(Received via mailing list)
On 2/8/09 6:15 PM, Paolo Montrasio wrote:
>> in produzione, la riga corrispondente al ciclo appena modificato riporta
>> il campo "data_inizio" vuota.
>>
>
> La soluzione è semplice: devi ricordarti di salvare il record
> modificato, ad esempio con @ciclo.save
>
> Nella view infatti vedi il record aggiornato perché hai modificato la
> copia caricata in memoria (@ciclo), ma Rails non salva automaticamente
> le modifiche che fai ai dati.
>
Quando l'operazione è così semplice trovo molto comodo anche usare la
update_attribute(s):

@ciclo.update_attribute(:iniziato, Date.today)

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