2011-06-28 39 views
6

Bir dizide yorum listesi var. Update_all öğesini dizide kullanabilir miyim?Dizide update_all kullanabilir miyim?

comments = Comments.find(:all,:conditions => ["test is not null"]) 

comments.update_all(:test => nil) 
+2

'Comments.update_all (" test = NULL "," test is null ")' 'nı kullanabilirsiniz. Bunun yerine – bor1s

+3

Bunu gerçekten çabuk sormama izin verin - denediniz mi? Rails konsolu bu tür bir şeyi denemek için harika bir araçtır. – pcg79

cevap

9

sen (Rails- eski sürümü bir dizi döndü -in find veya all) kapsamları ile çalışıyorsanız Şunları yapabilirsiniz:

comments = Comments.scoped(:conditions => "test IS NOT NULL") 
comments.update_all(:test => nil) 

Yakut/ActiveRecord modern versiyonları üzerine yazabilirsiniz:

Comments.where.not(test: nil).update_all(test: nil) 
3

update_all ActiveRecord tarafından sağlanan bir yöntemdir ve ne var iki seçeneğiniz vardır, bir Array ya Yorumlar aracılığıyla ActiveRecord kullanmak (veritabanını güncelleyecek) ya da bellekte ve sadece objets değişen dizi map DÜZENLEME

comments = Comments.update_all({:test => nil}, 'test IS NOT NULL') 

veya

comments = Comments.find(:all,:conditions => ["test is not null"]) 
comments.map! { |c| c.test = nil unless c.test} 

: ikinci örnekte hata, c.test değil c

olan veritabanı değiştirerek
+0

İkinci örneğiniz veritabanındaki değişiklikleri kaydetmez (bir "c.ave" ye veya bir şeye gereksinim duyar) ve tüm yorumu yalnızca "c.test" değil "nil" olarak ayarlarsınız. –

+0

Sorunu, veritabanındaki değişiklikleri kaydetmeyle ilgili olarak, tüm yorumun ayarlanmasıyla çözdüm, zaten cevabımın metnindeydim, soru değişikliklerin veritabanına mı yoksa yalnızca dizi ... bu yüzden iki çözüm verdim –

İlgili konular