Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails回调,在保存之前和创建之前有什么区别?_Ruby On Rails_Ruby_Ruby On Rails 3_Validation - Fatal编程技术网

Ruby on rails RubyonRails回调,在保存之前和创建之前有什么区别?

Ruby on rails RubyonRails回调,在保存之前和创建之前有什么区别?,ruby-on-rails,ruby,ruby-on-rails-3,validation,Ruby On Rails,Ruby,Ruby On Rails 3,Validation,你能详细解释一下什么是:在保存之前和:在创建之前RubyonRails回调,以及它们与Rails验证有什么关系吗?验证是否发生在:保存之前或:创建之前 在Rails下的创建操作中,在数据库操作之前有六个回调,在数据库操作之后有两个回调。依次为: 验证前的 在验证之前\u创建 验证后的 在验证之后\u创建 保存之前 创建之前 数据库插入 创建后的 保存后的 更新操作具有完全相同的集合,除了读取Update而不是create(以及Update而不是INSERT)之外 从中,您可以看到,验证是在bef

你能详细解释一下什么是
:在保存之前
:在创建之前
RubyonRails回调,以及它们与Rails验证有什么关系吗?验证是否发生在
:保存之前或
:创建之前

在Rails下的创建操作中,在数据库操作之前有六个回调,在数据库操作之后有两个回调。依次为:

  • 验证前的
  • 在验证之前\u创建
  • 验证后的
  • 在验证之后\u创建
  • 保存之前
  • 创建之前


    数据库插入
  • 创建后的
  • 保存后的
  • 更新操作具有完全相同的集合,除了读取
    Update
    而不是
    create
    (以及Update而不是INSERT)之外

    从中,您可以看到,验证是在
    before\u save
    before\u create
    回调之前执行的


    保存之前的
    发生在创建之前的
    之前。据我所知,他们之间没有发生任何事情;但是,
    before\u save
    也会在更新操作时触发,而
    before\u create
    只会在Creates时触发。

    before\u save
    会在每次保存对象时调用。对于新对象和现有对象也是如此。(创建和更新操作)


    创建之前
    仅在创建之前。因此,仅适用于新对象(创建操作)

    在创建之前
    vs
    在保存之前:打开=>:创建

    有时,您必须注意回调的顺序

    有关更多详细信息,请参见此处:

    在保存之前:on=>:create
    不起作用(至少在rails 3.2上),您可以使用:
    在保存之前:生成api密钥,:if=>:新建记录?
    ,相反,使用选项
    :on=>:create
    ,分别在验证前使用
    和验证后使用
    。在保存后使用
    或创建后使用
    时,您将如何引用刚刚创建的记录?@bcackerman-在保存后
    或创建后
    回调中,
    self
    是刚保存的记录,因为它在保存后存在。这包括自动生成的字段,如
    id
    created\u at
    updated\u at
    。还要记住,在创建之前
    指的是保存到数据库中的新对象,而不是调用的实际
    create
    方法。因此,即使从
    save
    方法,在创建之前仍然可以触发
    。@Rads-er,否?文档在保存前仍会列出
    ,在创建前仍会列出