Forum: Italian Ruby user group ROR 2: consiglio su come aggiornare un dato

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.
Daneel O. (Guest)
on 2009-01-26 17:03
Buongiorno lista.
Sto facendo un'agendina che sarà usata dagli operatori per contattare
dei clienti; avevo intenzione di farla funzionare così: c'è la lista di
nomi, l'operatore clicca su uno e vede i dettagli (classico "show");
oltre a questi però c'è anche un pulsante "Prossimo" che serve per
salvare su una tabella apposita i riferimenti dell'operatore che ha
chiamato, chi è stato chiamato, quando ed eventuali note per tenere
traccia ed evitare richiamate consecutive. Fin qui funziona tutto.
Volevo anche fare in modo che nella tabella dei contatti mi aggiornasse
il campo "chiamato" (un booleano), in modo da vedere immediatamente chi
non fosse mai stato contattato... e qui cominciano i dolori...
Premetto che sto ancora imparando, quindi se scrivo oscenità ditemelo.
Bene, ecco qui cos'ho combinato:

nel controller della tabella dei contatti c'è (ah, per ora premendo il
pulsante si ritorna all'elenco, prossimamente sistemerò, un macello alla
volta :-) ) :

...
  def show
    @contatti = Contatti.find(params[:id])
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @contatti }
  end
...
  def prossimo
    @contatti = Contatti.find(params[:id])
    @contatti.update_attributes(params[:contatti])
    @telefonate = Telefonate.new(params[:telefonate])
    @telefonate.save
  end

Nella view show.html.erb c'è:

...
<% form_tag :action => 'prossimo' do %>

<p>
<b><label for="telefonate_user_id">Id operatore:</b><br>
<%= text_field 'telefonate', 'user_id' %></p>
<p><b><label for="telefonate_note">Note:</label></b><br>
<%= text_field 'telefonate', 'note' %></p>

<input id="telefonate_contatti_id" name="telefonate[contatti_id]"
value="<%= @contatti.id %>" type="hidden"/>
<input id="contatti_chiamato" name="contatti[chiamato]" value="<%=  %>"
type="hidden"/>

<%= submit_tag "Prossimo" %>
<% end %>

...

Non riesco a capire perché mi ritorni "Couldn't find Contatti without an
ID"

se su "prossimo" c'è "@contatti = Contatti.find(params[:id])",
"@contatti.update_attributes(params[:contatti])" non dovrebbe prendersi
l'id del contatto attualmente visualizzato, tirare dala view quello che
lo riguarda e aggiornare i dati?

E' meglio che faccia un controller apposito staccato, piuttosto che
lavorare dentro le cose dei contatti?

Grazie in anticipo
Luca M. (Guest)
on 2009-01-26 17:11
(Received via mailing list)
2009/1/26 Daneel O. <removed_email_address@domain.invalid>:

> <% form_tag :action => 'prossimo' do %>
...
> Non riesco a capire perché mi ritorni "Couldn't find Contatti without an
> ID"
>
> se su "prossimo" c'è "@contatti = Contatti.find(params[:id])",
> "@contatti.update_attributes(params[:contatti])" non dovrebbe prendersi
> l'id del contatto attualmente visualizzato, tirare dala view quello che
> lo riguarda e aggiornare i dati?

l'errore significa che params[:id] non contiene l'id che ti serve,
direi perche' nella generazione dell'url manca la specifica dell'id (e
stai usando le route "predefinite" di rails), se ho capito il tuo
codice questo dovrebbe andare bene:

<% form_tag :action => 'prossimo', :id=>@contatti.id do %>


ciao,
Luca
Daneel O. (Guest)
on 2009-01-26 17:22
Luca M. wrote:
>
> l'errore significa che params[:id] non contiene l'id che ti serve,
> direi perche' nella generazione dell'url manca la specifica dell'id (e
> stai usando le route "predefinite" di rails), se ho capito il tuo
> codice questo dovrebbe andare bene:
>
> <% form_tag :action => 'prossimo', :id=>@contatti.id do %>

Confermo, funziona, grazie mille :-D
This topic is locked and can not be replied to.