Modificare un record da controller diversi


#1

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 %>

<% 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

Ciclo no.: <%= text_field_tag :ciclo_officina, params[:ciclo_officina] %>

<%= submit_tag “Inizia” %>


#2

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


#3

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


#4

On 2/8/09 6:15 PM, Paolo M. 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