- 浏览: 153572 次
- 性别:
- 来自: 杭州
最新评论
-
mysky1984:
:cry::arrow::idea:
Filter chain skipping --- 跳过过滤器链 -
shaka:
受用,考虑过这个问题没有?如何给过滤器传参数,或者在子类过滤器 ...
Filter chain skipping --- 跳过过滤器链 -
xlth2006@sina.com:
[img][/img][flash=200,200][/fla ...
rails2.0被废弃的用法
文章列表
Agile+Web+Development+with+Rails中文版.pdf
翻译的不是很理想,如果你没耐性还是建议别下,如你有好的介绍,麻烦通知一下,谢谢
- 2008-07-26 18:38
- 浏览 1981
- 评论(0)
原文:Behavior Driven Design (并非公开版权文档)
你可能已经注意到,验证模对象改变了你在单元测试中执行的那类测试的本质。传统的单元测试中,通过断言(Assertion)来进行大多数的验证。这是一种对应用程序状态的测试。模对象的测试,是测试测试中调用过程十分符合预期。它测试的是应用程序的行为。至少潜在能力上,行为测试更容易将期望行为与实际的实现方法分开。
行为驱动设计(BDD)的口号是试图将测试设计从实现空间移到问题空间。部分地使用设计BDD工具集,测试可以通过指定更接近自然语言的关键词来进行。BDD工具充分利用模对象,既作为说明问题的方法,也作为区分单 ...
- 2008-11-12 00:26
- 浏览 4074
- 评论(0)
Rake是怎么来的?
很多年以前,当 Jim Weirich还在为一个Java项目工作时,他最初的选择也是Makefile,但是很快他意识到:要是能够在Makefile中嵌入Ruby代码,那会是多么的方便呀,于是,Rake就这么产生了。
Rake支持任务创建,任务依赖关系追踪,以及文件编译时间识别。最后一个功能对Ruby程序员应该用不到,但如果你同时还是一个C程序员,那么你可以尝试使用Rake来替代Make。
Rake如何工作
让我们通过一个例子来说明吧,假设我今天很郁闷,想要借酒消愁,这个过程涉及以下几个任务:
买酒
买下酒菜
搞掂它们
假设使用Rake来管理这3个任务,那么我 ...
- 2008-10-06 22:42
- 浏览 4612
- 评论(0)
常用的数据库字段类型如下:
字段类型 中文说明 限制条件 其它说明
CHAR 固定长度字符串 最大长度2000 bytes
VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749
NCHAR 根据字符集而定的固定长度字符串 最大长度2000 b ...
- 2008-08-11 14:40
- 浏览 6504
- 评论(0)
ActionView::Helpers::AssetTagHelper 和ActionView::Helpers::UrlHelper 模块包
含很多方法,它们可让你引用外部资源到当前“模板”中。当然,更通常使用的是link_to(),
它创建一个超链接给你的应用程序内的其它“动作”。
<%= link_to "Add Comment", :action => "add_comment" %>
传递给link_to()的第一个参数是用于显示这个链接的文本。下一个是指定链接目标的
哈希表。它们的格式与284 页中讨论的“控制器”的url_f ...
- 2008-08-10 16:24
- 浏览 3131
- 评论(0)
先前我们说过可以在“模板”中放置代码。现在我们要纠正这句话。在“模板”内放置
少量代码还是可以让人接受的—这会让它们有更多动态性。但是,在“模板”内放置大量的
代码就是糟糕的风格。
这有两个主要原因。首先,在你的应用程序“视图”端放置大量的代码,很容易会让你
降低要求并开始添加应用级别的功能给“模板”内的代码。这是个糟糕的风格;你希望放置
应用程序代码在“控制器”和“模型”层中,以便在任何地方都可以使用它们。在你给应用
程序添加新的视图时你就会得到回报。
另一个原因是rhtml 是基本的HTML。当你编辑它时,你正在编辑一个HTML 文件。如果
你有用于创建你的层的个人工具,它们会希望与HTML ...
- 2008-08-10 16:23
- 浏览 2945
- 评论(0)
Builder “模板”
Builder 是个独立库,它可让你在代码中表达结构化文本(如XML)。一个Builder“模板”
(在扩展名.rxml 文件内)包含使用了Builder 库的Ruby 代码来生成XML。
这儿是个简单的Builder“模板”,它在XML 中输出一个有产品名字和价格的清单。
xml.div(:class => "productlist") do
xml.timestamp(Time.now)
@products.each do |product|
xml.product do
xml.productname(product.title)
xml ...
- 2008-08-10 16:22
- 浏览 4410
- 评论(0)
当你写一“视图”时,你就正在写一个“模板”:有时候这将生成最终结果。要理解这
些“模板”是如何工作的,我们需要关心三件事:
1、“模板”在哪儿。
2、它们的运行环境,和
3、它们内部是什么。
“模板”在哪儿
render()方法期望在由全局的template_root 配置选项定义的目录下找到“模板”。缺
省,这被设置为当前应用程序的app/views 目录。在这个目录内,约定是给每个“控制器”
的“视图”一个分离的子目录。例如,我们的Depot 应用程序包含admin 和store“控制器”。结果,我们在app/views/admin 和app/views/store 目录下“模板”。
典型地 ...
- 2008-08-10 16:14
- 浏览 2972
- 评论(0)
在课程的最后两章我们会提到很多列名字,它们对“活动记录”有重大意义。这儿是总
结。
1、created_at, created_on, updated_at, updated_on 用创建行的或最后更新行(_at
形式)或(_on 形式)的时间戳来自动更新。
2、lock_version Rails 将跟踪行版本号并完成乐观锁。如果表包含lock_version 的话。
3、type 由“单个表继承”使用来跟踪一个行的类型。
4、id 表主键列的缺省名字。
5、xxx_id 用xxx 的复数形式来引用表名字的外键的缺省名字。
6、xxx_count 为子表xxx 维护一个counter 缓存。
...
- 2008-08-10 16:09
- 浏览 2844
- 评论(0)
可在“模型”类内直接指定回调处理器,你可以创建分离的处理器类,它封装所有回调
方法。这些处理器可以在多个“模型”间共享。一个处理器类是个简单的类,它定义回调方
法(before_save(),after_create(),等等)。在app/models 目 ...
- 2008-08-10 16:04
- 浏览 2917
- 评论(0)
before_create 和before_update 回调有种潜在的用法是timestamping 行。
class Order < ActiveRecord::Base
def before_create
self.order_created ||= Time.now
end
def before_update
self.order_modified = Time.now
end
end
“活动记录”可以不让你操心这些事。如果你的数据库表有个列名为created_at 或
created_on,它会自动地设置行创建时间的时间戳(timestamp)。同样地,一个列名字为
update ...
- 2008-08-10 15:57
- 浏览 2783
- 评论(0)
“活动记录”控制“模型”对象的生命周期—它创建它们,监视它们的修改,保存,更
新和删除。使用“回调”,“活动记录”让我们的代码参与这种监视过程。我们可以在一个
对象的生命周期内让任何重大的事件来调用我们 ...
- 2008-08-10 15:46
- 浏览 2837
- 评论(0)
数据库列有个带限制的类型集: integers, strings, dates, 等等。典型地,我们的应
用程序却有很多类型—我们用类定义来表现我们代码的抽象。更好的事是,如果我们能够映
射数据库内的一些列信息到我们的高级抽象中—我们以同样方式包装行数据本身在“模型”
对象中。
例如,customer 表数据可能包括用于存储消费者姓名的列—或许是姓,名,称呼。在我
们的程序内,我们想包装这些与名字有关的列到一个单独的Name 对象中;三个列被映射到一
个单独的Ruby 对象中,与其它所的customer 表字段一同包含在消费者“模型”中。而且,在我们回头写“模型”时,我们希望从Name 对象抽 ...
- 2008-08-07 00:20
- 浏览 4257
- 评论(0)
Acts As List
在子表中使用acts_as_list,便能从父表的“视图”中得到像子表的行为。父表将能够
遍历子表,在列表内移动子表,或从列表内移除子表。
通过给每个子表一个位置数来实现列表。这意味着子表必须有个列来记录此位置 ...
- 2008-08-07 00:03
- 浏览 3963
- 评论(0)
def index
when_fragment_expired 'causes_list', 15.minutes.from_now do
@causes = Cause.find_all_ordered
end
end
如果能够容忍数据稍微有些陈旧,那么使用定时的到期机制将可以极大地简化缓存策略。对于每个被缓存的元素,只需指定想要缓存的内容、可生成动态内容的任何控制器动作以及超时。与页面缓存类似,如果需要,也可以使用 expire_fragment :controller => controller, :action => action, :id => id ...
- 2008-08-06 00:18
- 浏览 2782
- 评论(0)