首先说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-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-compose run web rails new . --force --database=postgresql --skip-bundle 调整 Gemfile 以反映 javascript 运行时 $ gem 'therubyracer', platforms: :ruby 由于 Gemfile 中的更改而重建 docker 镜像...
rails new my_app cd my_app ``` 配置数据库(如果需要),编辑`config/database.yml`,然后运行数据库迁移: ```bash rails db:create rails db:migrate ``` 最后,启动Rails服务器: ```bash rails server ```...
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, ...
rails new my_project_name ``` 进入项目目录后,可以使用以下命令启动Rails控制台和服务器: ```bash cd my_project_name rails console rails server -p 3000 ``` ##### 7. 文档与API文档 可以通过`rake doc:...
- **标准的RESTful控制器动作**: 列举并解释了每个标准的RESTful动作(如`index`、`show`、`new`、`create`等)的作用和用法。 - **单一资源路由**: 讨论了处理单个资源的特殊路由设计。 - **嵌套资源**: 探讨了...
FactoryFaster 通过在安全的情况下用build替换create优化 Rails 应用程序的 FactoryGirl 使用。 安装 将此行添加到“开发”组中应用程序的Gemfile中: gem 'factory_faster' 然后执行: $ bundle 用法 只处理一...
如何使用 Hotwire、StimulusJS 和 Turbo 在 Rails 中创建具有自动更新功能的...docker compose run web bin/rails db:create db:migrate 转至http://localhost:3000/people/new 并测试更改国家/州/城市选择或项目选择。
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 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.
rails new myapp ``` 这将生成一个标准的Rails项目结构。进入项目目录: ```bash cd myapp ``` 配置数据库连接。打开`config/database.yml`文件,根据你的MySQL配置填写用户名、密码和数据库名称。 接下来,初始...
在这个基本示例中,我们将探讨如何在Ruby on Rails框架中实现JSONAPI,以及如何与Java客户端进行交互。 一、Ruby on Rails与JSONAPI Ruby on Rails 提供了强大的模型-视图-控制器(MVC)架构,使得开发RESTful API...
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
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中的关联不仅仅定义了模型之间的关系,还提供了很多便利的方法,如`build`, `create`, `destroy`, `find_by`, `where`等,使得在处理关联对象时更加高效和简洁。例如,`user.posts.create(title: "New Post")` ...
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:...