Ruby on rails RubyonRails-如何获取和更新所有

Ruby on rails RubyonRails-如何获取和更新所有,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我目前正在从网站上获取一些信息 model_hash = Model.where(id: some_id, name: some_name).pluck(:name, :id).to_h 我想在它看到的每个模型上更新另一个属性。我知道我会写: Model.where(id: some_id, name: some_name).update_all(last_import_date: DateTime.now) 但我想知道是否有一种方法可以将这两条语句组合起来,即ActiveRecordPul

我目前正在从网站上获取一些信息

model_hash = Model.where(id: some_id, name: some_name).pluck(:name, :id).to_h
我想在它看到的每个模型上更新另一个属性。我知道我会写:

Model.where(id: some_id, name: some_name).update_all(last_import_date: DateTime.now)

但我想知道是否有一种方法可以将这两条语句组合起来,即ActiveRecord
Pull
生成SQL
SELECT
查询,而
update\u all
生成SQL
update
查询。您可以在
更新过程中检索某些SQL方言的数据,例如在PostgreSQL中,以指定希望从更新的行返回哪些值。在您的情况下,例如:

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\u time,并使用
.map(&:update\u time)
,但可能有一种更巧妙的方法