ruby 功力修炼

建表

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.mb_used, disk.mb_available
  end
end
时间: 2024-10-26 00:29:35

ruby 功力修炼的相关文章

最实用的现货白银交易系统

成功的操盘手离不开一套成功的交易系统,完善的日交交易系统应该包括以下要素: 1 .开仓法. 日内交易有着时间短.见效快的特点,因此开仓与趋势交易有着很大的区别,趋势操作使用倒金字塔加码法和平均加码法比较好,而日内操作应在快和准为原则上采取试仓法和一次建仓法. “ 试仓法” 适用于信号准确率不太高(低于 90% )的操作,先用 5% 的仓位进行试探,如果发展一段时间止损位不破,基本趋势没有被打破的迹象,并且价格基本上还处于成本区时可在评估风险的基础上加仓,此法能有效规避看盘失误而引起的较大损失,而

前端知识体系及修炼

前端开发的核心是HTML + CSS + JavaScript.本质上它们构成一个MVC框架,即HTML作为信息模型(Model),CSS控制样式(View),JavaScript负责调度数据和实现某种展现逻辑(Controller). HTML 1. 标签的分类 1. 标签表示一个元素 2. 按性质划分: Block-Level和Inline-Level 3. 按语义划分: Headings: h1, h2, h3, h4, h5, h6 Paragraphs: p Text Formatti

sed修炼系列(四):sed中的疑难杂症

本文目录:1 sed中使用变量和变量替换的问题2 反向引用失效问题3 "-i"选项的文件保存问题4 贪婪匹配问题5 sed命令"a"和"N"的纠葛 1.sed中使用变量和变量替换的问题 在脚本中使用sed的时候,很可能需要在sed中引用shell变量,甚至想在sed命令行中使用变量替换.也许很多人都遇到过这个问题,但引号却死活调试不出正确的位置.其实这不是sed的问题,而是shell的特性.搞懂sed如何解决引号的问题,对理解shell引号问题有

sed修炼系列(三):sed高级应用之实现窗口滑动技术

html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary { display: block } audio,canvas,progress,video { display: inline-block; vertical-align: baseline } audio:not([co

前端知识体系及修炼攻略

Web前端开发工程师是一个很新的职业,在国内乃至国际上真正开始受到重视的时间不超过5年.Web前端开发是从网页制作演变而来的,名称上有很明显的时代特征.随着人们对用户体验的要求越来越高,前端开发的技术难度越来越大,Web前端开发工程师这一职业终于从设计和制作不分的局面中独立出来. 早期的前端其实就是Table布局,后来发展到所谓的Div + CSS网站重构,再到现在的让人眼花缭乱的各种各样的新技术,Web前端技术发展是非常快速的,因此选择了前端这个行业就意味着不停的学习吧.让我们先看看张克军绘制

sed修炼系列(一):花拳绣腿之入门篇

本文为花拳绣腿招式入门篇,主要目的是入门,为看懂sed修炼系列(二):武功心法做准备.虽然是入门篇,只介绍了基本工作机制以及一些选项和命令,但其中仍然包括了很多sed的工作机制细节.对比网上各sed相关文章以及介绍sed的书籍,基本上都只介绍了sed是如何使用的,却没有"How sed Works"这种工作机制的原理性内容,最多给出一段稍微解释下.即使是非常流行的<sed & awk>也只是零零散散地介绍了一些sed工作机制细节.我想本文必能刷新你对sed的认知.

专访《Java程序员修炼之道》作者Ben Evans

转帖这篇文章,很大成分就是认同"保守的设计思想是Java的最大优势"这句话 ------------------------------------------------------------------ [编者按]Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,它几乎是每个程序员的入门语言,而<Java程序员修炼之道>更是深受程序员欢迎的学习书籍.该书作者之一Ben Evans最近参加了上海QCon大会,图灵社区采访了这位大牛级人物. Ben Evans

前端修炼(转)

看到一篇博文,受益匪浅,特此激励自己. 内容转载自: BorisHuai前端修炼 > 如何成为前端开发高手 HTML 1. 标签的分类 1. 标签表示一个元素 2. 按性质划分: Block-Level和Inline-Level 3. 按语义划分: Headings: h1, h2, h3, h4, h5, h6 Paragraphs: p Text Formatting: em, strong, sub, del, ins, small Lists: ul, li, ol, dl, dt, d

程序员修炼指南——引导你成为真正的编程高手

@程序员修炼指南——引导你成为真正的编程高手 评,这是一个指导方向,不一定是你自己的目标,但如果这些你都做到了,那还有哪些是不能做到的? 前言 你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发) 建议: 不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少10年通用. 回顾一下历史,看看历史上时间线上技术的发展,你才能