Rails

2016-03-25 14 views
0

'de birden çok örneği nasıl etkili bir şekilde güncelleştirilir lending_restricted:boolean sütununa sahip bir Company modelim var. Kısıtlama ile ilgili liste restricted_codes yöntemiyle toplanır.Rails

Ve sadece gerekli şirketleri güncellemek için, böyle yazdım: Temelde çalışıyor, ama sanki

old_codes = Company.where(lending_restricted: true).pluck(:code) 
new_codes = restricted_codes 
(new_codes - old_codes).each do |code| 
    c = Company.find_by(code: code) 
    c.try(:update_attributes, lending_restricted: true) 
end 
(old_codes - new_codes).each do |code| 
    c = Company.find_by(code: code) 
    c.try(:update_attributes, lending_restricted: false) 
end 

benzer fonksiyonu iki kere yazmak için biraz gereksiz bu. Böyle bir yöntem yazmanın daha iyi bir yolu var mı?

restricted_codes sayısı 100'dür ve Rails projemde yaklaşık 4000 şirket var.

cevap

2

Test edilmemiş, ama belki de böyle bir şey? Kodunuzu da güncelledim, böylece bir sorguda (N sorguları yerine) yapıldı.

def update_lending_restriction(codes, restriction) 
    Company.where(code: codes).update_all(lending_restricted: restriction) 
end 

old_codes = Company.where(lending_restricted: true).pluck(:code) 
new_codes = restricted_codes 

update_lending_restriction(new_codes - old_codes, true) 
update_lending_restriction(old_codes - new_codes, false)