此代碼應通過應用過濾器,以它的「名字」值更新整個表:Ruby on Rails的ActiveRecord的效率
entries = select('id, name').all
entries.each do |entry|
puts entry.id
update(entry.id, { :name => sanitize(entry.name) })
end
我非常新的Ruby on Rails和覺得它很有趣,我選擇查詢被分爲單列選擇:
SELECT `entries`.* FROM `entries` WHERE (`entries`.`id` = 1) LIMIT 1
SELECT `entries`.* FROM `entries` WHERE (`entries`.`id` = 2) LIMIT 1
SELECT `entries`.* FROM `entries` WHERE (`entries`.`id` = 3) LIMIT 1
...
根據我的理解,它是一種優化的,由Rails的規定 - 在一次Select的需要,只有當它一排(每個週期),而不是所有條目。
但是,在這種情況下它真的更有效嗎?我的意思是,如果我的數據庫表中有1000條記錄 - 比單個數據庫更容易創建1000條查詢嗎?如果沒有,我如何強制Rails爲每個查詢選擇多行?
另一個問題是:並非所有行都由此查詢更新。如果提供的值與已存在的值相同(換句話說,如果entry.name == sanitize(entry.name)),Rails是否會忽略更新查詢?