2016-03-25 8 views
0

lending_restricted:booleanカラムを持つCompanyモデルがあります。 制限に関するリストはrestricted_codesメソッドによって収集されます。Railsで複数のインスタンスを効率的に更新するには

そして唯一の必要な企業を更新するためには、私はこのように書いている:それは基本的に正常に動作しますが、私は感じて

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 

それは同様の機能を2回書くことが少し冗長です。 このようなメソッドを書く方が良いでしょうか?

restricted_codesの数は約100で、私のRailsプロジェクトには約4000社があります。

答えて

2

未テストですが、これはおそらく何か?また、N個のクエリではなく1つのクエリでコードが更新されるようにコードを更新しました。

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) 
関連する問題