快速业务通道

跨越边界: Streamlined,第1部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
令 script/server 启动服务器,并把浏览器指到 localhost:3000/trails/list。

现在就已经得到了一个简单的能够工作的带有数据库支持的 Web 应用程序,可以进行基于 CRUD 的每 个操作,如图 1 所示。可以看到主屏幕列出了每个项目和相关的图片,提供了 Ajax 窗口用来创建、读 取、更新和删除项目。

图 1. 简单的 Rails 应用程序

跨越边界: Streamlined,第1部分 - 编程入门网

到现在,只付出了很少努力,就到达了一个可以把应用程序开发带到更高档次的地步。Rails 演示人 员总会展示搭建功能,因为它是如此之炫,而且对于调试和在匆忙之间为客户做演示,都极为有用。可以 通过代码生成器生成搭建 —— 在这个示例中输入了 script/generate scaffold Trail Trails —— 或 者在控制器中指定 scaffold 元编程标记。每种方式都有自己的用途。

跨越边界: Streamlined,第1部分(2)

时间:2011-07-22 IBM Bruce Tate

添加关系

搭建确实有一些明显限制:它不处理关系,也没有利用优秀的 Rails Web 服务或 Ajax 支持。为了说 明这些限制,要创建带有模型、视图和控制器的 Location。Location 与 Trail 之间存在一对多关系。 搭建并不能协助该关系的管理。

创建 location 的模型(script/generate model Location)和控制器(script/generate controller Location Locations)。就像对 TrailsController 所做的那样,把 scaffold :location 添加到 location_controller.rb。要把 Location 和 Trail 编织在一起,两者间需要多对一关系,所以 把 belongs_to :location 添加到 Trail,把 has_many :trails 添加到 Location,如清单 3 所示:

清单 3. trail.rb 和 location.rb 间的关系

class Trail < ActiveRecord::Base   belongs_to :location end class Location < ActiveRecord::Base   has_many :trails end

把 db/migrate/002_create_locations.rb 编辑成清单 4 那样:

清单 4. locations 表的迁移

class CreateLocations < ActiveRecord::Migration   def self.up    create_table :locations do |t|     t.column :city, :string     t.column :state, :string    end    add_column "trails", "location_id", :integer   end   def self.down    drop_table :locations    remove_column "trails", "location_id"   end end

输入 rake migrate 运行迁移。(要查看关于迁移的更多内容,请参阅 跨越边界: Rails 迁移。)

一下子就有了这么多设置。现在可以深吸一口气,总结以下到目前为止构建的内容:

有了一个针对赛道的数据库表和另一个针对地点的数据库表。

有了 Ruby 模型对象,对象之间还有 Rails 关系。

模型现在在赛道和地点之间有多对一关系。

有了处理模式中的变化的策略,也可以收回目前为止两个主要模式变化中的任何一个。

有了原始用户界面。

虽然可能想添加一些验证,但模型对象是适合生产应用的第一级 Rails 对象。许多 Rails 模型对象 之所以简单,是因为属性都是用元编程动态添加的。为了演示现在的关系,通过控制台添加一些数据。输 入 script/console 启动控制台,并输入清单 5 中的命令:

跨越边界: Streamlined,第1部分(3)

时间:2011-07-22 IBM Bruce Tate

清单 5. 把数据添加到赛道和地点

>> trail = Trail.new => #<Trail:0x2446168 @attributes={"name"=>nil, "location_id"=>nil,   "description"=>nil, "difficulty"=>nil}, @new_record=true> >> trail.name = "Hermosa Creek" => "Hermosa Creek" >> trail.diffi

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号