目前我拉一些信息出來的Ruby on Rails的 - 如何採摘和update_all
model_hash = Model.where(id: some_id, name: some_name).pluck(:name, :id).to_h
我想更新它看到模型的另一個屬性。我知道我可以寫:
但我想知道如果有,我可以結合這兩種說法
目前我拉一些信息出來的Ruby on Rails的 - 如何採摘和update_all
model_hash = Model.where(id: some_id, name: some_name).pluck(:name, :id).to_h
我想更新它看到模型的另一個屬性。我知道我可以寫:
但我想知道如果有,我可以結合這兩種說法
ActiveRecord的pluck
生成SQL查詢SELECT
而update_all
生成SQL查詢UPDATE
的方式。您可以在UPDATE
期間檢索特定SQL方言的數據,例如在PostgreSQL you can use RETURNING
中指定想要從更新的行中返回哪些值。在你的情況,例如:
UPDATE models
SET last_import_date = '2017-04-04 20:49:07'
WHERE name = 'Some Name'
RETURNING id;
的ActiveRecord不支持這一點,可能是因爲其高度的方言依賴,並從ActiveRecord的這些差異遠打算抽象。
我不認爲有這樣的事情是必需的。你的代碼通常被使用。但是如果你真的想在一個查詢中做到這一點,你可以試試這個。
model_hash = Map.where(id: some_id, name: some_name).map { |x| x.update_attributes(last_import_date: DateTime.now) ? [x.id, x.some_name] : ["value","nil"] }.to_h
儘管它很複雜。 希望這有助於...
您可以創建一個模型方法update_time,並使用'.map(&:update_time)',但可能有一個更清晰的方法 – whodini9