我看到可以在Rails中使用三种不同的方法创建ActiveRecord对象,如下面的链接所示,哪种方法最好?
http://guides.rubyonrails.org/active_record_basics.html#create
它们都以不同的方式达到相同的结果。没有“最佳”方法。
每种情况都有不同的用例,例如,将对象保存在Rails控制器中的可接受方式如下:
#app/controllers/your_controller.rb
class YourController < ApplicationController
def new
@model = Model.new
end
def create
@model = Model.new model_params
@model.save
end
end
如另一个答案中所述,其基础是您将始终调用模型类的实例。区别在于其工作方式的复杂性(create!
保存在基类中):
创建!(* args,&block)
与#create类似,但调用可以创建!在基类上。引发异常>如果发生验证错误。
期望参数使用与Base.create!相同的格式。
最好的例子是destroy
和delete
:
销毁(id)公共
销毁具有给定ID的一个或多个对象。该对象首先被实例化,因此在删除该对象之前,将触发所有回调和过滤器。此方法比ActiveRecord#delete效率低,但允许运行清除方法和其他操作。
并且delete
-不调用ActiveRecord回调(或多或少是纯SQL):
删除(id_or_array)公共
使用SQL DELETE语句删除具有与id参数匹配的主键的行,并返回删除的行数。Active Record对象未实例化,因此不执行该对象的回调,包括任何:dependent关联选项。
此外,您还必须记住,ActiveRecord在保存/更新模型时会调用一系列钩子:
因此,如果使用create
,它将调用负责此操作的钩子。在决定使用哪个时非常重要。
最后,最好坚持约定,直到发现错误为止。这是惯例,因为它运作良好;也许不是最好的方法,但是如果您对使用哪种方法感到困惑,那么最好是从您知道可以正常工作的基线开始进行试验。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句