我的Company
模型有lending_restricted:boolean
列。
有关限制的列表由restricted_codes
方法收集。
为了更新必要的公司,我写道:
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
它的工作原理基本上很好,但我觉得写两次类似的功能有点多余。 有没有更好的方法来编写这样的方法?
restricted_codes
的数量约为100,我的Rails项目中约有4000家公司。
答案 0 :(得分:2)
未经测试,但也许是这样的?我还更新了您的代码,以便在一个查询中完成(而不是N个查询)。
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)