Prima di postare questo bug come bug al team, volevo vedere se stavo facendo qualcosa di sbagliato che potrebbe causare questo comportamento. In particolare, la proprietà autosave di has_many associazioni non sembra funzionare come da documenti.: proprietà di salvataggio automatico di has_many associazioni interrotte in Rails 2.3.4?
Per avere un riferimento, qui è la più recente documentazione API: http://api.rubyonrails.org/classes/Acti ... ation.html
Date un'occhiata alla sezione "One-a-molti Esempio". Ho duplicato il codice esattamente lì in un'applicazione di test e non funziona per me. Nello specifico, l'oggetto genitore viene aggiornato, ma l'oggetto figlio non lo è.
mio schema è il seguente:
create_table :posts do |t|
t.string :title
t.timestamps
end
create_table :comments do |t|
t.text :body
t.integer :post_id
t.timestamps
I miei modelli sono i seguenti:
class Post < ActiveRecord::Base
has_many :comments, :autosave => true
end
class Comment < ActiveRecord::Base
belongs_to :post
end
Nella console, corro i seguenti comandi (il post e commenti oggetti sono già nel DB a questo punto):
post = Post.find(1)
post.title # => "The current global position of migrating ducks"
post.comments.first.body # => "Wow, awesome info thanks!"
post.comments.last.body # => "Actually, your article should be named differently."
post.title = "On the migration of ducks"
post.comments.last.body = "Actually, your article should be named differently. [UPDATED]: You are right, thanks."
post.save
post.reload
Ma questo è ciò che ho per l'uscita:
post.title # => "On the migration of ducks"
post.comments.last.body # => "Actually, your article should be named differently."
Inoltre, guardando nei registri questa è l'unica istruzione di aggiornamento che vedo:
Messaggio Update (0.6ms) UPDATE "messaggi" SET "updated_at" = '2010-01-18 23:32: 39 ', "title" =' Sulla migrazione delle anatre 'DOVE "id" = 1
Quindi sembra che il salvataggio non si sia ridotto all'oggetto dei commenti, il che mi sembra chiaramente rotto. Ho provato questo su due sistemi diversi che eseguono 2.3.4 e il comportamento è ripetibile.
Ecco la parte strana, però: se prima chiamo "post.comments" prima di provare a impostare il valore, funziona perfettamente! Per essere precisi:
post.title = "On the migration of ducks"
post.comments #Note that this line was not called above
post.comments.last.body = "Actually, your article should be named differently. [UPDATED]: You are right, thanks."
post.save
post.reload
Ora la produzione mi dà i risultati corretti:
post.title # => "On the migration of ducks"
post.comments.last.body # => "Actually, your article should be named differently. [UPDATED]: You are right, thanks."
E i registri contengono il corretto aggiornamento:
commento Update (0.3ms) UPDATE "commenti" SET "updated_at" = '2010-01-18 23:44:43', "body" = 'In realtà, il tuo articolo dovrebbe essere nominato diversamente. [AGGIORNATO]: hai ragione, grazie. ' DOVE "id" = 2
Quindi questo mi sembra davvero rotto. Sto indovinando che è un problema con il modo in cui vengono gestiti i riferimenti agli oggetti, vale a dire che una volta che l'oggetto fa parte di una collezione allocata, salva bene ma non salva quando viene estratto come un singolo oggetto dal database. Ma prima di inviarlo al team di Rails come un bug, volevo vedere se qualcun altro si fosse imbattuto in questo problema, o se stavo facendo qualcosa di completamente ossuto che non vedo perché ho passato tutto il giorno a questo .
non credo di poter inviare un bug Rails 2.3.4, poiché non è nemmeno l'ultima versione stabile della serie 2.3. È possibile che sia stato corretto un errore nel modulo AutosaveAssociation. Vorrei anche dubitare che farebbero un bugfix a questo in 2.3.11. –