Saturday, May 20, 2006

Ruby on Rails全景开发:(5)创建购物车(Cart)

Ruby on Rails全景开发:(4)分类目录

Ruby on Rails全景开发:(4)分类目录


创建目录清单:

我们已经创建了Admin “控制器”,以便于卖方能够管理 “Depot” 应用程序。现在应该创建第二个“控制器”,它的目的是消费者。让我们称它为Store:

depot> ruby script/generate controller Store index

我们让它创建个新的“控制器”(叫StoreController),它包含一个Action:index();同时,我们需要数据库之外得到产品清单,并使它可以在显示这个表的“视图”中被编码。这意味着我们必须修改store_controoler.rb 内的index() 方法。我们需要在编写程序的时候找到一个合适的抽象级别方法,所以让我们假设我们可以要求一个“虚拟模型” 能提供我们可以出售的产品清单。

def index
@products = Product.salable_items
end

我们需要在“模型”内的product.rb 文件内定义方法salabel_items().
下面代码使用了Rails 的find() 方法,其中:

  • :all 参数 —— 告诉Rais,我们想匹配给出条件的所有行;
  • :conditions 参数 —— 要求留下所有date_available 域来小于等于now() 函数(MySQL的一个标准方法,获得当前的时间);结果是未来才有效的书目会被过滤掉,而只显示当前时间以前有效的书目;
  • :order 参数 —— 把date_available 域按照降序排列起来;

find() 方法返回包含一个Product 对象的数组,此对象由从数据库返回的每一行组成。salable_items() 方法简单地处理这个处理并返回给“控制器”。现在我们需要写出“视图”模板。我们要在一个简单的表格中显示products 表。要做到这点,编辑app/views/store/index.rhtml 文件。记住“视图”的路径名由“控制器”(store)和“动作”(index)的名字构成。.rhtml部分表示它是个ERb模板。

形成一个框架式页面:

上次我们提到一个Layout 的概念,“层”是个模板,我们可以按顺序向其内添加内容。在我们的例子中,我们可以定义一个单独的“层”,用它来存储所有的页面并将目录页面也放到这个 “层”中。稍后我们可以对“购物车”和“付款页面”做同样的事情。我们能够在一个固定的框架里面,通过替换不同的内容,来实现在一个统一的界面中执行不同 的操作的功能。与传统的HTML里面的Frame相类似。除了使用了HTML构件外,这个“层”有三个Rails特定条目。

  1. 第四行使用了一个Rails “helper” 方法来生成一个标记给我们的depot.css 样式表。
  2. 第九行我们设置变量@page_title 的值为页标题。
  3. 但是真正的魔术是从第十九行开始的。Rails自动地设置变量@content_for_layout 给page-specific 内容

通过这个请求的“视图”调用来产生东西。在我们的例子中,这将是由index.rhtml 生成分类页面。同时,我们可以进一步修改index.rhtml 文件:

总结一下今天的工作:

  1. 创建个新的“控制器”来控制用户交互。
  2. 实现缺省的index()“动作”。
  3. 添加一个类方法给Product “模型”来返回可销售项目。
  4. 实现了一个“视图”(一个.rhtml文件)并添加“层”来包含它(另一个.rhtml文件)。
  5. 创建最简单的样式表。

Friday, May 19, 2006

Ruby on Rails全景开发:Depot(3)界面优化

Ruby/Rails命名规则

Ruby on Rails全景开发:Depot.参考资料列表

Ruby on Rails全景开发:Depot(2) 产品管理

Ruby on Rails全景开发:Depot(1) 概述

IBM:使用Rails进行敏捷Web开发

FW:Ajax基础配置 — XMLHttpRequest

Thursday, May 18, 2006

12个顶极的 Ruby on Rails 教程

更好地在Windwos服务器上面铺设Rails

Why Rails?

图解Windows下安装RubyonRails

Programming Ruby 中文翻译

Ruby语言简介

FW: Java / Ruby on Rails两种框架比较

《Agile Web Development with Rails》第二版

为Wordpress引入Ajax Comments 完美解决方案

Oracle全力支持Ruby on Rails