Rails : new, build, create

       首先说new吧,app = App.new(params[:app]),这个是用给定的params来实例化一个app对象,注意此时只是初始化了一个对象,ruby只是在内存里 面给app分配了一个内存地址,但是,这个地址还没有指定任何的有效的内存,所以接下来ruby要做的就是调用model里面的initialize函数 来根据给定的参数进行初始化这个对象,并将该对象保存到堆里面。

      对于new!来说,这个跟new相比,就是在save到数据库的时候,如果save失败,就会报一个错误。

      对于create来说,过程大致跟new差不多,唯一的区别是,create = new + save,即create一步操作等于new和save的两部操作。

      对于create!来说,类似于new! 过程大致也是跟new!差不多  区别是create! = new! + save  如果保存失败的话会返回一个错误。

      对于build来说,主要的混淆的地方在于与new的区别,其实,我认为build是new的一个别名,但是用的地方可能跟new有点区别,在我看 来,build大多是用于有关联关系的对象模型的时候,用来创建子model用的,比如说 Person  与 Order是一对多的关系,那么我们可以用 @persion.build()方法来创建于该person对应的orders

 

向数据库插记录时经常会用到new, build, create。这三个方法很容易混淆,整理一下备忘:

概述:

new :只是在内存中新建一个对象,操作数据库要调用save方法。
create = new + save。
build:与new基本相同,多用于一对多情况下。还有一个不同请看使用示例
!:new!, create!, build!与new, create, build的区别是带!的方法会执行validate,如果验证失败会抛出导常。

使用示例

设:Article与Comment是一对多关系



@article  = Article. new (params[ :article ])
@article .save

new后要调用save才会操作数据库

注Article.build(params[:article])会报错,build不能这样用。



@article  = Article.create(params[ :article ])

会直接在数据库里插入一条记录

@comment  @article .comments.build

与new方法基本一样,有人说build会自动设置外键值,其实我测试时发现build和new都可以设置外键。

如果你处理一个“has_one”一对一关系时,这样写:


@profile  @user .build_profile
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值