Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    28

    problemi con UPDATE

    Salve a tutti,

    mi sto dannando con l'update di un record, il progetto in questione
    è sempre un registro elettronico e la situazione è questa:

    una vista presenta tutte le assenze di un alunno, a fianco di ciascuna c'è la scritta
    'modifica' che con l'helper edit_absence_path(@absence) punta alla vista edit.html.erb;
    modifico i dati ma quando clicco sul bottone 'salva assenza' mi dà l'errore
    “No Method Error in AbsencesController#update - undefined method `stringify_keys!' for "26":String” e l'indirizzo su cui punta è /absences/26

    Qualcuno mi dà una mano?
    Grazie!


    codice:
    <span id="inserimento_center"
      <p style="color:blue" align=center > Modifica l'assenza: </p>
      <% form_tag absence_path(@absence.id),:method => :put do %> 	
        
    
      alunno: <%= @absence.pupil.cognome+' '+@absence.pupil.nome %> 
        </p>
        
    
       dal:  <%= select_date @absence.data_inizio, :use_month_numbers => true, :prefix=>'start1', :order => [:day, :month, :year] %>   </p> 
        
    
       al:   <%= select_date @absence.data_fine,  :use_month_numbers => true, :prefix=>'start2', :order => [:day, :month, :year] %>	</p> 
        
    
     giustificato? 	  
    	<select name= "giustifica"
          	  <option> SI </option>
    	  <option> NO </option>
            </select>	
        </p>
        
    
    
          <%= submit_tag "Salva assenza" %>		
        </p>
      <% end %>
    </span>
    il controller absences_controller ha i seguenti:

    codice:
    def edit
       @absence = Absence.find(params[:id])
     end
     
     def update
       @absence = Absence.find(params[:id])
       @absence.update_attributes(params[:id])
     end
    usa il tuo talento, qualunque esso sia, i boschi sarebbero terribilmente silenziosi se cantassero solo gli uccelli migliori

  2. #2
    Per cortesia, usa il tag CODE per incollare del codice.
    L'errore è palese.

    codice:
     def update
       @absence = Absence.find(params[:id])
       @absence.update_attributes(params[:id])
     end
    Leggi la documentazione di update_attribute e valuta invece cosa hai scritto tu e cosa stai tentando di fare.
    Inoltre, se lavori su un record non usare form_tag ma form_for.

    Nota a margine: evita l'uso di nomi e variabili italiane dentro al codice quando Rails adotta convenzioni in inglese. E' semplicemente illeggibile oltre che inguardabile.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    28
    Caro Weppos,
    da qualche mese mi sono imbarcato nella realizzazione di un registro elettronico in Rails e lo sto
    anche terminando, non sono un programmatore di professione ma sono un insegnante (non di informatica) curioso e che cerca di far risparmiare qualche soldo alla sua scuola.

    Ho inviato più domande all'interno di qs forum e più di una volta mi hai aiutato e di questo ti
    ringrazio ancora.

    Ieri ho perso 3 ore per cercare di capire come far funzionare l'update nel mio progetto (non ho usato lo scaffold) e ad un certo punto ho mandato questa domanda al forum e me ne sono andato a fare un giro in bibicletta, con la testa vuota.
    Ora leggo la tua risposta: “... l'errore è palese… leggi la documentazione... l'uso di nomi italiani è semplicemente illeggibile oltre che inguardabile.” che, francamente, poco mi aiuta e anzi un po' mi offende.
    Se non hai tempo/voglia di rispondere alle domande, fai a meno, non sei obbligato (già altre volte ho inviato domande ad un forum e nessuno ha risposto, è normale visto che le risposte sono gratis... anzi io mi stupisco ancora quando qualcuno si prende la briga di rispondere ai miei quesiti!) ... ma un minimo di onestà intellettuale ti dovrebbe risparmiare di rispondere con tale sufficienza!

    Ultima nota: già altri mi hanno fatto notare che l'uso delle variabili italiane è poco professionale
    ma, ad un certo punto dello sviluppo, era troppo tardi per cambiarle.
    Saluti,
    Marco
    usa il tuo talento, qualunque esso sia, i boschi sarebbero terribilmente silenziosi se cantassero solo gli uccelli migliori

  4. #4
    Marco, avrei potuto prendere il codice e correggerlo, ma mi piace pensare che chi si prende la briga di usare un linguaggio abbia desiderio di capire qualcosa di più che passare il tempo a fare copia in colla, ottenendo risposte a mo' di call center.

    Ti ho dato indicazione di dove sia il problema. Ti ho detto che stai usando un metodo in modo sbagliato.
    Se poi tu non hai voglia di aprirti la documentazione e leggere che il metodo update_attributes si usa con

    record.update_attributes(hash)
    # esempio record.update_attributes(:name => "bar", :description => "content")

    invece di passargli un id numerico, allora è un altro discorso.

    La mia non era sufficienza ma semplicemente desiderio di evitare di fornire sempre la pappa pronta ancora più quando la soluzione è dietro l'angolo. Se ho all'attivo oltre 13000 post è perché sono disposto a fornire supporto, ma non a fare il call center.

    Ad ogni modo, la soluzione è questa:

    1. cambia form_tag in form_for ed utilizza il form sulla risorsa
    2. utilizza nell'action record.update_attributes(params[:absence]) presupponendo che tu abbia chiamato così la risorsa

    Se usi il form così come lo hai creato tu, l'alternativa è passare uno ad uno i valori costruendo l'hash direttamente nell'action. E' una pratica sconsigliata e poco flessibile quando si lavora con un record.

    Se hai dubbi su come usare form_for o l'update, puoi generare un nuovo scaffold e vedere il codice. E' un esempio più che indicativo su come usare rails per l'update di una risorsa.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    28
    mi sembra fuori luogo il tuo "... se non hai voglia di aprirti la documentazione"
    visto quello che ti avevo scritto, grazie comunque dell'aiuto!
    Marco
    usa il tuo talento, qualunque esso sia, i boschi sarebbero terribilmente silenziosi se cantassero solo gli uccelli migliori

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.