2011-07-18 16 views
29

Uygulamamda, bir Konuşmanın birçok mesajı var. Bu Konumada yeni bir Mesaj oluşturulduğunda/kaydedildiğinde, Görüşme'nin updated_at özniteliğini nasıl güncellerim?Raylar: Çocuk kaydederken ana nesneyi güncelle

Bunu yapan :touch => true'un farkındayım, ancak bir ileti yok edildiğinde de İleti'yi güncelleştirir, ne istediğimi değil.

Teşekkürler.

Modelleri

class Conversation < ActiveRecord::Base 
    has_many :messages 
end 

class Message < ActiveRecord::Base 
    belongs_to :conversation 
end 

cevap

36

İleti sınıf içinde kullanılması geri arama

after_save do 
    conversation.update_attribute(:updated_at, Time.now) 
end 
+0

+1! – jaydel

+0

harika, bunun için teşekkürler. – alste

+0

bana neden "self.conversation" dan bahsetmeden çalıştığını söyleyebilir misin? ne zaman ve ne zaman kullanılmamalı? – HungryCoder

51

Yo sadece ilişki üzerinde de tanımlayabiliriz.

class Message < ActiveRecord::Base 
    belongs_to :conversation, touch: true 
end 

(William G'nin cevap olarak Kaynak aynı: http://apidock.com/rails/ActiveRecord/Persistence/touch) yumruk beni dövdüğü

+8

Bu, geri aramaları çalıştırmaz! Ve bunu yapmak istediğiniz çoğu zaman ana geri aramaları çalıştırmak istediğiniz zaman. – Nerve

+3

Özgün sorudan: 'Söyleşi'nin yeni bir İletisi oluşturulduğunda/kaydedildiğinde bir Konuşmanın updated_at özniteliğini nasıl güncellerim?' 'Tototo' yöntemi çoğunlukla zaman damgalarını güncellemek için kullanılır. (Dokümantasyondan: 'Kaydı güncelleştirilmiş olarak ayarlanmış güncellenmiş_at/ile kaydeder.)' Touch'in en yaygın kullanımı muhtemelen önbellek için geçerlidir. Geri arama yapmak isterseniz, 'after_touch' geri araması var demektir. – chug2k

+0

Başka bir kullanım site haritası zaman damgaları içindir, bu durumda geri arama isteği yoktur. – Swards

İlgili konular