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 中,它既创建该模型的新实例,又将其保存到数据库中 - 再次,与您所做的没什么不同。
所以,我会说它很好。
是否可以在模型上使用 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 中,它既创建该模型的新实例,又将其保存到数据库中 - 再次,与您所做的没什么不同。
所以,我会说它很好。