建表

ActiveRecord::Schema.define do
drop_table :hosts if table_exists? :hosts
create_table :hosts do |table|
table.column :name, :string
end drop_table :disks if table_exists? :disks
create_table :disks do |table|
table.column :host_id, :integer
table.column :dev_name, :string
table.column :mnt_point, :string
table.column :mb_available, :integer
end drop_table :reports if table_exists? :reports
create_table :reports do |table|
table.column :disk_id, :integer
table.column :created_at, :datetime
table.column :mb_used, :integer
end
end

上述代码总共创建了 :hosts、:disks和:reports三张表。

网络上找到的绝大多数示例都没有drop_table这句话,我个人认为练习的时候会频繁地测试,加上自动删除才是完整的步骤。

此处的功能应该就是对应Rails里migration过程。

5. 定义模型

这一步进入正题,定义在代码中使用的对象,即数据模型

class Host < ActiveRecord::Base
has_many :disks
end class Disk < ActiveRecord::Base
belongs_to :host
has_many :reports
end class Report < ActiveRecord::Base
belongs_to :disk
end

对象与之前定义的表一一对应,其中用belongs_to和has_many等宏声明了对象/表之间的联系。根据DRY原则,此处无需再定义表的字段!

这一步就是在Rails中定义model的过程。

6. 生成数据

host = Host.create(:name => "slarti")
disk = host.disks.create(:dev_name => "/dev/disk1s1",
:mnt_point => "/",
:mb_available => 80 * 1024)
disk.reports.create(:mb_used => 20 * 1024)
disk.reports.create(:mb_used => 25 * 1024)

通过操作上一步定义的数据模型即可实现插入数据。

7. 检索

Host.all.each do |host|
puts "*** #{host.name} ***"
host.disks.each do |disk|
printf "%s(%s) %d/%d\n", disk.mnt_point, disk.dev_name, disk.reports.last.m\
b_used, disk.mb_available
end
end

ruby 功力修炼的更多相关文章

  1. Ruby入坑指南

    1.1 简介 Ruby语言是由松本行弘(Matz)设计,是一门通用的.面向对象的.解释型语言. 1.2 Ruby?RUBY?ruby? 1.Ruby:用来表示编程的语言 2.ruby:是指一个计算机程 ...

  2. Day05 -寻找自己:Ruby的self物件与singleton method

    前情提要:在第四天里,我们用参赛者的例子解说实体方法与类别方法.类别中的实体物件,想要玩弄方法时,可以有三种取用方式:(跟斯斯有三种一样) 该类别所定义的实体方法. 模块中可取得的实体方法.(关于模块 ...

  3. php功底你修炼到哪一级

    第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟练(核心是安装配置基本操作) 目标:能够完成基本的LNMP系统安装,简单配置维护:能够做基本的简单系统的PHP开发:能够在PHP中型系统中支 ...

  4. 架构师修炼 III - 掌握设计原则

    关于软件的设计原则有很多,对于设计原则的掌握.理解.实践及升华是架构师的一项极为之必要的修炼. 记得在12年前第一次阅读<敏捷开发>时,五大基本设计原则就深深地植入到我的脑海中一直影响至今 ...

  5. 看过ruby相关书籍

    <ruby编程语言> <crafting rails applications> <agile web developemnt> <build awesome ...

  6. 安装cocoapods遇到两大坑-Ruby版本升级和Podfile的配置

    今天安装cocoapods #移除原有ruby源 $ gem sources --remove https://rubygems.org/ #使用可用的淘宝网 $ gem sources -a htt ...

  7. Unable to download data from http://ruby.taobao.org/ & don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

    安装cocoapods,记录两个问题! 1.镜像已经替换成了 http://ruby.taobao.org/, 还是不能不能安装cocoapods, 报错:Unable to download dat ...

  8. 安装了ruby后怎么安装sass

    在命令行中输入 ruby -v 查看版本号 先移除默认的https://rubygems.org源,命令为gem sources --remove https://rubygems.org/,按回车 ...

  9. ruby 基础知识(一)

    突然今天发现一大神的博客:http://www.cnblogs.com/jackluo/archive/2013/01/22/2871655.html    相信初学者会受益颇多 ruby  参考文档 ...

随机推荐

  1. Docker部署IPython

    本文的部署环境是Ubuntu 14.04 Docker Docker 详细概念可以去search,简单来说就是把应用打包到一个容器里的轻量级系统虚拟化服务 IPython Notebook IPyth ...

  2. JSON和JSONP简单总结

    jsonp和json的区别,原理,在jquery中的使用 http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.h ...

  3. BZOJ1801 Ahoi2009 chess 中国象棋 【DP+组合计数】*

    BZOJ1801 Ahoi2009 chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行 ...

  4. Could not transfer artifact org.springframework:spring-tx:jar:3.2.3.RELEASE

    在maven中加入依赖时,如果jar下载失败,这时pom文件中就会出现上面的错误,重新添加也不好用, 这时要手动去maven库中删除已经下载的依赖包. 默认库位置:C:\Users\XXX\.m2

  5. select rows by values in a column from Dataframe

    df.loc[df['column_name'] == some_value] details in: http://stackoverflow.com/questions/17071871/sele ...

  6. Mybatis新增返回主键的两种方法 (mysql)

    1.自增:LAST_INSERT_ID (自动返回最后一个INSERT或 UPDATE 问询为 AUTO_INCREMENT列设置的第一个 发生的值.) <!-- mysql的自增ID :LAS ...

  7. ubuntu 12.04 下 Vim 插件 YouCompleteMe 的安装

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4137402.html 1.需要保证vim的版本大于7.3.584,否则的话需要更新vim 可 ...

  8. 聊聊Oracle 11g的Snapshot Standby Database(下)

    3.Snapshot Standby行为研究 下面我们分析一下Snapshot Standby的工作性质和行为性质.我们在主库方向研究当前状态. --主库日志情况 SQL> select gro ...

  9. Oracle修改主键约束

    项目需求,有张表,原有三个联合主键,现在需要再加一个字段进去,而恰恰这个字段可以为空的.去数据库捞了一把,还好数据都不为空: SQL> select count(*) from t_wlf_re ...

  10. 搭建基于hyperledger fabric的联盟社区(五) --启动Fabric网络

    现在所有的文件都已经准备完毕,我们可以启动fabric网络了. 一.启动orderer节点 在orderer服务器上运行: cd ~/go/src/github.com/hyperledger/fab ...