关于new,create 和build的有关问题

关于new,create 和build的问题

       在做项目的时候,对于数据库的操作方法的胡乱调用时很可怕的,因为自己很初级,初级的不能再初级,所以初次接触rails的时候,对于里面的create,new,build等方法不是很了解,所以胡乱用了一通,导致了很多的bug,相信很多对rails接触不久的朋友也会有相同的疑惑,今天我来给大家简单的说明一下。

       首先说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