在Rails中创建Activerecords对象的三种方法中哪一种最好?为什么要选择一个而不是另一个呢?

BA

我看到可以在Rails中使用三种不同的方法创建ActiveRecord对象,如下面的链接所示,哪种方法最好?

http://guides.rubyonrails.org/active_record_basics.html#create

理查德·派克(Richard Peck)

它们都以不同的方式达到相同的结果。没有“最佳”方法。


每种情况都有不同的用例,例如,将对象保存在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!相同的格式。

最好的例子是destroydelete

销毁(id)公共

销毁具有给定ID的一个或多个对象。该对象首先被实例化,因此在删除该对象之前,将触发所有回调和过滤器。此方法比ActiveRecord#delete效率低,但允许运行清除方法和其他操作。

并且delete-不调用ActiveRecord回调(或多或少是纯SQL):

删除(id_or_array)公共

使用SQL DELETE语句删除具有与id参数匹配的主键的行,并返回删除的行数。Active Record对象未实例化,因此不执行该对象的回调,包括任何:dependent关联选项。


此外,您还必须记住,ActiveRecord在保存/更新模型时会调用一系列钩子

在此处输入图片说明

因此,如果使用create,它将调用负责此操作的钩子。在决定使用哪个时非常重要。

最后,最好坚持约定,直到发现错误为止。这是惯例,因为它运作良好;也许不是最好的方法,但是如果您对使用哪种方法感到困惑,那么最好是从您知道可以正常工作的基线开始进行试验。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档