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


    本章节展开对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,谢谢!

  • 相关阅读:
    TensorFlow学习笔记1:graph、session和op
    TensorFlow学习笔记2:逻辑回归实现手写字符识别
    Tensorflow学习笔记3:卷积神经网络实现手写字符识别
    Firstpython介绍
    Oracle sql语句学习
    总结__window dns域名解析错误及其解决方法
    Group By 和 Having, Where ,Order by语句的执行顺序
    Oracle 语句分类
    webbrowser自动登录,没有点击事件,不是submit提交按钮的情况下如何模拟点击登录
    webbrowser跨域访问iframe中的元素实现自动登录
  • 原文地址:https://www.cnblogs.com/Tommy-Yu/p/4141122.html
Copyright © 2020-2023  润新知