`
clark1231
  • 浏览: 256877 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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
分享到:
评论

相关推荐

    docker-rails:Docker的Rails游乐场

    docker-compose run web rails new . --force --no-deps --database=mysql sudo chown -R $USER:$USER . docker-compose build 编辑config/database.yml docker-compose up docker-compose run web rake db:...

    docker-rails:使用 Docker 和 Composer 的准系统 Rails 4 容器

    $ docker-compose run web rails new . --force --database=postgresql --skip-bundle 调整 Gemfile 以反映 javascript 运行时 $ gem 'therubyracer', platforms: :ruby 由于 Gemfile 中的更改而重建 docker 镜像...

    ruby 例子 模仿rails 的 mvc

    rails new my_app cd my_app ``` 配置数据库(如果需要),编辑`config/database.yml`,然后运行数据库迁移: ```bash rails db:create rails db:migrate ``` 最后,启动Rails服务器: ```bash rails server ```...

    Rails.Angular.Postgres.and.Bootstrap.2nd.Edition

    With this fully revised new edition, take a holistic view of full-stack development to create usable, high-performing applications with Rails 5. Rails is a great tool for building web applications, ...

    centOS Rails3环境搭建

    rails new my_project_name ``` 进入项目目录后,可以使用以下命令启动Rails控制台和服务器: ```bash cd my_project_name rails console rails server -p 3000 ``` ##### 7. 文档与API文档 可以通过`rake doc:...

    The rails4 way

    - **标准的RESTful控制器动作**: 列举并解释了每个标准的RESTful动作(如`index`、`show`、`new`、`create`等)的作用和用法。 - **单一资源路由**: 讨论了处理单个资源的特殊路由设计。 - **嵌套资源**: 探讨了...

    factory_faster:FactoryFaster 通过在安全的情况下将 create 替换为 build 来优化 Rails 应用程序的 FactoryGirl 使用

    FactoryFaster 通过在安全的情况下用build替换create优化 Rails 应用程序的 FactoryGirl 使用。 安装 将此行添加到“开发”组中应用程序的Gemfile中: gem 'factory_faster' 然后执行: $ bundle 用法 只处理一...

    使用 Hotwire在Ruby on Rails中创建动态依赖表单字段的示例项目

    如何使用 Hotwire、StimulusJS 和 Turbo 在 Rails 中创建具有自动更新功能的...docker compose run web bin/rails db:create db:migrate 转至http://localhost:3000/people/new 并测试更改国家/州/城市选择或项目选择。

    Beginning Ruby on Rails

    You'll learn to build Rails applications, connect to databases, perform necessary testing, and put the whole thing together to create real-world applications such as shopping carts and online ...

    Rails Crash Course(No Starch, 2014)

    Rails is a robust, ... Whether you're completely new to Ruby or you've been mucking around for a bit, Rails Crash Course will take you from the basics to shipping your first Rails application, fast.

    Rails2.2.2之windows环境搭建

    rails new myapp ``` 这将生成一个标准的Rails项目结构。进入项目目录: ```bash cd myapp ``` 配置数据库连接。打开`config/database.yml`文件,根据你的MySQL配置填写用户名、密码和数据库名称。 接下来,初始...

    使用jsonapi设计的Rails应用程序的基本示例_Ruby_Java.zip

    在这个基本示例中,我们将探讨如何在Ruby on Rails框架中实现JSONAPI,以及如何与Java客户端进行交互。 一、Ruby on Rails与JSONAPI Ruby on Rails 提供了强大的模型-视图-控制器(MVC)架构,使得开发RESTful API...

    rails-on-docker:在课程中创建的Rails应用程序的源代码-https-docker source code

    docker-compose run app rails new . --force --database=mysql --skip-bundle docker-compose build docker-compose up # http://localhost:3001 docker-compose run --rm app rails g scaffold

    myapp

    Open new terminal docker-compose exec web bash bundle install (Only the first time) rails db:create db:migrate db:seed rails assets:precompile启动服务器rails s -b 0.0.0.0[可选]启动webpack-dev-ser

    关于Rails中的表关联的程序

    Rails中的关联不仅仅定义了模型之间的关系,还提供了很多便利的方法,如`build`, `create`, `destroy`, `find_by`, `where`等,使得在处理关联对象时更加高效和简洁。例如,`user.posts.create(title: "New Post")` ...

    rails-docker

    cd $_$ git clone https://github.com/hato-poppo/rails-docker.git$ docker-compose build$ docker-compose run --rm web rails new . -d postgresql --api --minimal$ docker-compose run --rm web rake db:...

Global site tag (gtag.js) - Google Analytics