[ruby on rails] 跟我学之(3)基于rails console的查增删改操作

时间:2022-12-14 10:49:51

本章节展开对model的介绍:包括查增删改操作。紧接着上面一节《[ruby on rails] 跟我学之HelloWorld

创建模型

使用命令创建模型

创建表post,默认自带两栏位 title :string, content:text ,  在模型里面按照约定使用单数post而不是复数posts

cd blog
rails g model post title:string content:text

输出:

      invoke  active_record
create db/migrate/20141203105453_create_posts.rb
create app/models/post.rb
invoke test_unit
create test/models/post_test.rb
create test/fixtures/posts.yml

db/migrate/20141203105453_create_posts.rb文件内容如下:

class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
t.string :title
t.text :context t.timestamps
end
end
end

以上只是生成了迁移文件,而没有正式生成数据库。 需要运行以下指令来生成数据库。

rake db:migrate

相当于django的syncdb。 输出如下:

== 20141203105453 CreatePosts: migrating ======================================
-- create_table(:posts)
-> 0.0021s
== 20141203105453 CreatePosts: migrated (0.0029s) =============================

 

从控制台访问模型

进入控制台,类似于django的manage shell指令,ror使用以下指令:

rails console

简写为 rails c

新增记录:

模型类.new -> 模型实例变量.save

2.1.5 :001 > p = Post.new(:title => "My First Post", :context=>"this is my first post")
=> #<Post id: nil, title: "My First Post", context: "this is my first post", created_at: nil, updated_at: nil>
2.1.5 :002 > p.save()
(0.5ms) begin transaction
SQL (0.7ms) INSERT INTO "posts" ("context", "created_at", "title", "updated_at") VALUES (?, ?, ?, ?) [["context", "this is my first post"], ["created_at", "2014-12-03 11:44:50.954572"], ["title", "My First Post"], ["updated_at", "2014-12-03 11:44:50.954572"]]
(23.0ms) commit transaction
=> true

模型类.create

2.1.5 :003 > Post.create(:title => "create test", :context=>"test of create")
(0.2ms) begin transaction
SQL (0.4ms) INSERT INTO "posts" ("context", "created_at", "title", "updated_at") VALUES (?, ?, ?, ?) [["context", "test of create"], ["created_at", "2014-12-03 11:48:08.779270"], ["title", "create test"], ["updated_at", "2014-12-03 11:48:08.779270"]]
(21.9ms) commit transaction
=> #<Post id: 2, title: "create test", context: "test of create", created_at: "2014-12-03 11:48:08", updated_at: "2014-12-03 11:48:08">

查询记录

模型类.all

2.1.5 :004 > posts = Post.all
Post Load (0.6ms) SELECT "posts".* FROM "posts"
=> #<ActiveRecord::Relation [#<Post id: 1, title: "My First Post", context: "this is my first post", created_at: "2014-12-03 11:44:50", updated_at: "2014-12-03 11:44:50">, #<Post id: 2, title: "create test", context: "test of create", created_at: "2014-12-03 11:48:08", updated_at: "2014-12-03 11:48:08">]>

模型类.find(id)

2.1.5 :005 > post = Post.find(2)
Post Load (0.6ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT 1 [["id", 2]]
=> #<Post id: 2, title: "create test", context: "test of create", created_at: "2014-12-03 11:48:08", updated_at: "2014-12-03 11:48:08">

可以用[实例变量].[成员变量]的方式访问数据,如下:

2.1.5 :006 > post.title
=> "create test"
2.1.5 :007 > post.context
=> "test of create"

 

更新记录

模型实例变量.update -> 模型实例变量.save()

2.1.5 :008 > post.title = "test update"
=> "test update"
2.1.5 :009 > post.save()
(0.4ms) begin transaction
SQL (1.2ms) UPDATE "posts" SET "title" = ?, "updated_at" = ? WHERE "posts"."id" = 2 [["title", "test update"], ["updated_at", "2014-12-03 11:57:08.964494"]]
(10.0ms) commit transaction
=> true

模型实例变量.update_attribute(field,value)

2.1.5 :010 > post.update_attribute(:context,"test operation of update_attribute")
(0.4ms) begin transaction
SQL (1.4ms) UPDATE "posts" SET "context" = ?, "updated_at" = ? WHERE "posts"."id" = 2 [["context", "test operation of update_attribute"], ["updated_at", "2014-12-03 12:01:12.051869"]]
(32.3ms) commit transaction
=> true

模型实例变量.update_attributes(hash)

2.1.5 :013 > post.update_attributes(:title=>"test update_attribute 2", :context =>"content for test of update_attribute 2")
(1.4ms) begin transaction
SQL (1.2ms) UPDATE "posts" SET "context" = ?, "title" = ?, "updated_at" = ? WHERE "posts"."id" = 2 [["context", "content for test of update_attribute 2"], ["title", "test update_attribute 2"], ["updated_at", "2014-12-03 12:05:16.878764"]]
(26.1ms) commit transaction
=> true

删除记录

模型实例变量.destroy

2.1.5 :016 > post.destroy
(0.3ms) begin transaction
SQL (1.3ms) DELETE FROM "posts" WHERE "posts"."id" = ? [["id", 2]]
(23.6ms) commit transaction
=> #<Post id: 2, title: "test update_attribute 2", context: "content for test of update_attribute 2", created_at: "2014-12-03 11:48:08", updated_at: "2014-12-03 12:05:16">

转载请注明本文来自:http://www.cnblogs.com/Tommy-Yu/p/4141122.html,谢谢!

[ruby on rails] 跟我学之(3)基于rails console的查增删改操作的更多相关文章

  1. 一步一步学Linq to sql(三):增删改

    示例数据库 字段名 字段类型 允许空 字段说明 ID uniqueidentifier 表主键字段 UserName varchar(50) 留言用户名 PostTime datetime 留言时间 ...

  2. &lbrack;ruby on rails&rsqb; 跟我学之&lpar;9&rpar;删除数据

    首先需要在index页加个删除链接,并提供一个删除的确认,用户确认删除时,直接删除数据. 修改views 修改 app/views/posts/index.html.erb,如下: <h1&gt ...

  3. &lbrack;ruby on rails&rsqb; 跟我学之&lpar;8&rpar;修改数据

    修改views 修改index视图(app/views/posts/index.html.erb),添加编辑链接,如下: <h1>Our blogs</h1> <% @p ...

  4. &lbrack;ruby on rails&rsqb; 跟我学之&lpar;7&rpar;创建数据

    通过form来创建数据,本章节将会涉及内容:创建form,用户重导向,渲染views 和 flash消息. 1. views初步 编辑 app/views/posts/index.html.erb这个 ...

  5. &lbrack;ruby on rails&rsqb; 跟我学之&lpar;6&rpar;显示指定数据

    根据<[ruby on rails] 跟我学之路由映射>,我们知道,可以访问 GET    /posts/:id(.:format) 来显示具体的对象. 1. 修改action 修改 ap ...

  6. &lbrack;ruby on rails&rsqb; 跟我学之&lpar;5&rpar;显示所有数据

    之前的index页,显示的是hello world,现在将其修改为显示我们在rails console里面录入的数据. 1. 修改action 如之前的章节<[ruby on rails] 跟我 ...

  7. &lbrack;ruby on rails&rsqb; 跟我学之&lpar;4&rpar;路由映射

    前面<[ruby on rails] 跟我学之Hello World>提到,路由对应的文件是 config/routes.rb 实际上我们只是添加了一句代码: resources :pos ...

  8. 跟我一起学extjs5&lpar;18--模块的新增、改动、删除操作&rpar;

    跟我一起学extjs5(18--模块的新增.改动.删除操作)         上节在Grid展示时做了一个金额单位能够手工选择的功能,假设你要增加其它功能.也仅仅要依照这个模式来操作即可了,比方说你想 ...

  9. &lbrack;从源码学设计&rsqb;蚂蚁金服SOFARegistry之网络封装和操作

    [从源码学设计]蚂蚁金服SOFARegistry之网络封装和操作 目录 [从源码学设计]蚂蚁金服SOFARegistry之网络封装和操作 0x00 摘要 0x01 业务领域 1.1 SOFARegis ...

随机推荐

  1. jsp动作元素之forward指令

    forward指令用于将页面响应转发到另外的页面.既可以转发到静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器中的Servlet. forward指令格式如下: <jsp:for ...

  2. C&num;高级编程笔记 Day 4, 2016年9月 12日(接口)

    1.定义和实现接口:接口名称通常上以字母 I 开头 例子:定义IBankAccount接口 namespace Test.YinXi{ public interface IBankAccount{ v ...

  3. 用SQL命令查看Mysql数据库大小

    要想知道每个数据库的大小的话,步骤如下: 1.进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2.查询所有数据的大小: s ...

  4. silverlight 获取路径 config

    1.获取web.config配置内容: web.config default.aspx protected string InitParams { get; set; } InitParams = s ...

  5. python的小技巧 让你的代码更美观

    持续更新.. 1,活用lambda表达式 匿名函数 lambda 可以提供很多便利.下面是举例. dic = {1:lambda a,b : a+b} 2,代码一行化. 当逻辑语句后只有一行代码的时候 ...

  6. mongodb 系列 ~ mongo的两种引擎介绍对比

    一 简介 两种引擎方式的对比二  对比与说明   1 版本支持      MMAP引擎 3.2版本之前,默认引擎       WT 引擎 3.2版本之后,默认引擎   2 并发性能(核心)     M ...

  7. Asp&period;Net正则获取链接地址

    string html = “html代码”; Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?&lt ...

  8. SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法

    这几天有业务部门需要使用一个SAP B1老系统  中的报表,但是由于此报表没有加时间条件,导致一旦开始查询 就会导致B1系统异常退出.由于报表对应的SQL 是存在数据库中,所以想通过查找到这个报表的S ...

  9. 发布 &period;Net Core WebAPI 应用程序到 Docker

    目录 1. 创建 .net core webapi 项目 2. 编译应用 3. 创建 Dockerfile 文件 4. 上传文件到服务器 5. 生成Docker Image 6. 在Docker Co ...

  10. leetcode375

    public class Solution { public int GetMoneyAmount(int n) { , n + ]; , n); } int DP(int[,] t, int s, ...