2017-04-04 27 views
0

目前我拉一些信息出來的Ruby on Rails的 - 如何採摘和update_all

model_hash = Model.where(id: some_id, name: some_name).pluck(:name, :id).to_h 

我想更新它看到模型的另一個屬性。我知道我可以寫:

​​

但我想知道如果有,我可以結合這兩種說法

+0

您可以創建一個模型方法update_time,並使用'.map(&:update_time)',但可能有一個更清晰的方法 – whodini9

回答

0

ActiveRecord的pluck生成SQL查詢SELECTupdate_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的這些差異遠打算抽象。

0

我不認爲有這樣的事情是必需的。你的代碼通常被使用。但是如果你真的想在一個查詢中做到這一點,你可以試試這個。

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 

儘管它很複雜。 希望這有助於...