Rails:我可以在模型的 class 方法中创建和保存对象实例吗?

Rails: Can I create and save an object instance within a class method on a model?

是否可以在模型上使用 class 方法来创建同一模型的新实例?

场景是我想与外部 API 交互,在另一个服务上创建一个实例,然后在成功完成后将该新对象引用存储在本地模型中。

所以例如我想从控制器调用这样的东西:

MyModel.interact_with_api_function([variables required])

并且在模型上有一个像这样的 class 方法:

def interact_with_api([variables required])
  interacts with api, generates object over there, returns result
  This.new(identifier: result, ...).save!
end

是否可以在模型上使用 class 方法来创建同一模型的新实例?

是的,你可以做到。事实上,当您执行类似 MyModel.first 的操作时,这正是正在发生的事情。 first 是一个 class 方法,它从数据库中获取一行,创建模型的一个新实例,然后用从该数据库调用中获取的数据填充它。

场景是我想与外部 API 交互,在另一个服务上创建一个实例,然后在成功完成后将新对象引用存储在本地模型中。

如果您认为 SQL 对数据库的调用类似于对外部 API 的调用(即数据库是外部服务,就像您的 API) ,那么 first 方法中的情况与您正在做的并没有什么不同。

同样,MyModel.create 方法是一个 class 方法,内置于 Rails 中,它既创建该模型的新实例,又将其保存到数据库中 - 再次,与您所做的没什么不同。

所以,我会说它很好。