Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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 活动记录如何保存并初始化模型?_Ruby On Rails_Rails Activerecord - Fatal编程技术网

Ruby on rails 活动记录如何保存并初始化模型?

Ruby on rails 活动记录如何保存并初始化模型?,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,保存模型时,有些模型属性会从数据库中获取其值,如: 主键 在mysql级别设置的列默认值 当您插入一条记录(保存)时,它是否真的会在封面下进行两次调用,即插入然后选择?ActiveRecord不会在保存后进行查询以获取该信息。我对ActiveRecord的理解是,它在内部维护了大量关于数据库结构的信息,例如所有列的名称和类型,以便在模型中生成相应的方法。它还将知道默认值是什么,以便在db设置它的同时在模型中设置它 这并不是完全干涸的,如果您绕过ActiveRecord来重新构造数据库,将导致很多

保存模型时,有些模型属性会从数据库中获取其值,如:

  • 主键
  • 在mysql级别设置的列默认值

  • 当您插入一条记录(保存)时,它是否真的会在封面下进行两次调用,即插入然后选择?

    ActiveRecord不会在保存后进行查询以获取该信息。我对ActiveRecord的理解是,它在内部维护了大量关于数据库结构的信息,例如所有列的名称和类型,以便在模型中生成相应的方法。它还将知道默认值是什么,以便在db设置它的同时在模型中设置它


    这并不是完全干涸的,如果您绕过
    ActiveRecord
    来重新构造数据库,将导致很多问题,但是通过较少的数据库操作节省开销是值得的。

    您可以查看服务器日志,看看会发生什么。我刚刚试着用Postgres创建一个简单的用户,它使用一个
    INSERT
    和一个
    RETURNING
    子句返回新的id:
    SQL(11.9ms)INSERT-INTO“users”(“username”、“password\u digest”、“session\u-token”、“created\u-at”、“updated\u-at”)值($1、$2、$3、$4、$5)返回“id”
    @dwenzel但如果表格在postgresl级别设置了默认值怎么办?嗯。。。我只是尝试创建一个带有默认值的新对象,但创建后它没有查询默认值;同样,只返回一个id为的
    子句,但是Rails确实返回了默认值。我不确定Rails是如何知道这些值的;也许是通过查看代码中的模式?我会让这里更有经验的人来回答这个问题。