Rails中 new, create, build方法的理解

在写Rails应用过程中,如果使用脚手架,那么Rails会自动生成各种方法给你,可能你不需要理解,但是真正当你自己coding的时候,发现,new,create,build之间,有时候会很迷惑,结合网上资料,作者做以归纳整理.

 

clark同学的笔记:

首先说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是一对多的关系,那么我们可以用 @person.order.build()方法来创建于该person对应的orders

 

老宋同学的笔记

概述:

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

使用示例

设: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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值