標籤:
建表
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 endend
上述代碼總共建立了 :hosts、:disks和:reports三張表。
網路上找到的絕大多數樣本都沒有drop_table這句話,我個人認為練習的時候會頻繁地測試,加上自動刪除才是完整的步驟。
此處的功能應該就是對應Rails裡migration過程。
5. 定義模型
這一步進入正題,定義在代碼中使用的對象,即資料模型
class Host < ActiveRecord::Base has_many :disksendclass Disk < ActiveRecord::Base belongs_to :host has_many :reportsendclass Report < ActiveRecord::Base belongs_to :diskend
對象與之前定義的表一一對應,其中用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 endend
ruby 功力修鍊