2010-04-26 49 views
10

ActiveRecord'da kaydın birincil anahtarını bilmeden/kayda geçirmeden nasıl güncelleyebiliriz.Bir kaydın birincil anahtar hakkında endişe duymadan nasıl güncelleştirileceği

Ben

UPDATE addresses set user_name = 'Samuel' where id = 15 

tekabül ama yapmak istediğim ne olur

Address.update(15, :user_name => 'Samuel') 

yaparsanız: Bunun

UPDATE addresses set user_name = 'Samuel' where cid = 15 

neler olacak ActiveRecord eşdeğer ??

Address.update({:cid => 15}, :user_name => 'Samuel') 

ama bu işe yaramazsa:

denedim.

cevap

14
a = Address.find_by_cid(15) 
a.user_name = 'Samuel' 
a.save 
+9

iki soruyu kovuyorsunuz ... kötü yol .. –

+2

kabul edildi .. daha iyi bir cevap olmalı. – baash05

41

Kullanım update_all sınıf yöntemi:

Address.where(:cid => 15).update_all(user_name : 'Samuel') 

http://apidock.com/rails/ActiveRecord/Relation/update_all

+2

bu cevap olmalı. Veritabanına bir kez ve neredeyse sıfır ağ trafiğine. Güzel. – baash05

+3

Önemli not: "İlgili modelleri başlatmıyor ve Active Record geri aramalarını veya doğrulamalarını tetiklemiyor." Update_all "öğesine geçirilen değerler ActiveRecord'un tür döküm davranışından geçmeyecek. Yalnızca geçirilebilecek değerleri almalı. SQL veritabanına. " – ehannes

7

, @ typeoneerror cevabı üzerine açıklık sadece yerine bir ActiveRecord :: İlişkisi nesne üzerinde update_all kullanmak için kayıt nesnesi:

ModelName.where(:unique_id => x).update_all(:name => "x") 
+0

Benzersiz bir kimlik olması gerekmiyor. – laffuste

+4

Yeni bir –

+0

oluşturmak yerine cevabını geliştirmelisiniz. Diğer cevap bir örneğe sahip olmadığında, yalnızca yanıtın yöntemi için bu yanıt yazılmıştır. –

İlgili konular