`
jbf034
  • 浏览: 152289 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
Agile+Web+Development+with+Rails中文版.pdf 翻译的不是很理想,如果你没耐性还是建议别下,如你有好的介绍,麻烦通知一下,谢谢
原文:Behavior Driven Design (并非公开版权文档) 你可能已经注意到,验证模对象改变了你在单元测试中执行的那类测试的本质。传统的单元测试中,通过断言(Assertion)来进行大多数的验证。这是一种对应用程序状态的测试。模对象的测试,是测试测试中调用过程十分符合预期。它测试的是应用程序的行为。至少潜在能力上,行为测试更容易将期望行为与实际的实现方法分开。 行为驱动设计(BDD)的口号是试图将测试设计从实现空间移到问题空间。部分地使用设计BDD工具集,测试可以通过指定更接近自然语言的关键词来进行。BDD工具充分利用模对象,既作为说明问题的方法,也作为区分单 ...
Rake是怎么来的? 很多年以前,当 Jim Weirich还在为一个Java项目工作时,他最初的选择也是Makefile,但是很快他意识到:要是能够在Makefile中嵌入Ruby代码,那会是多么的方便呀,于是,Rake就这么产生了。 Rake支持任务创建,任务依赖关系追踪,以及文件编译时间识别。最后一个功能对Ruby程序员应该用不到,但如果你同时还是一个C程序员,那么你可以尝试使用Rake来替代Make。 Rake如何工作 让我们通过一个例子来说明吧,假设我今天很郁闷,想要借酒消愁,这个过程涉及以下几个任务: 买酒 买下酒菜 搞掂它们 假设使用Rake来管理这3个任务,那么我 ...
常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 最大长度2000 bytes VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749 NCHAR 根据字符集而定的固定长度字符串 最大长度2000 b ...
ActionView::Helpers::AssetTagHelper 和ActionView::Helpers::UrlHelper 模块包 含很多方法,它们可让你引用外部资源到当前“模板”中。当然,更通常使用的是link_to(), 它创建一个超链接给你的应用程序内的其它“动作”。 <%= link_to "Add Comment", :action => "add_comment" %> 传递给link_to()的第一个参数是用于显示这个链接的文本。下一个是指定链接目标的 哈希表。它们的格式与284 页中讨论的“控制器”的url_f ...
先前我们说过可以在“模板”中放置代码。现在我们要纠正这句话。在“模板”内放置 少量代码还是可以让人接受的—这会让它们有更多动态性。但是,在“模板”内放置大量的 代码就是糟糕的风格。 这有两个主要原因。首先,在你的应用程序“视图”端放置大量的代码,很容易会让你 降低要求并开始添加应用级别的功能给“模板”内的代码。这是个糟糕的风格;你希望放置 应用程序代码在“控制器”和“模型”层中,以便在任何地方都可以使用它们。在你给应用 程序添加新的视图时你就会得到回报。 另一个原因是rhtml 是基本的HTML。当你编辑它时,你正在编辑一个HTML 文件。如果 你有用于创建你的层的个人工具,它们会希望与HTML ...
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 ...
当你写一“视图”时,你就正在写一个“模板”:有时候这将生成最终结果。要理解这 些“模板”是如何工作的,我们需要关心三件事: 1、“模板”在哪儿。 2、它们的运行环境,和 3、它们内部是什么。 “模板”在哪儿 render()方法期望在由全局的template_root 配置选项定义的目录下找到“模板”。缺 省,这被设置为当前应用程序的app/views 目录。在这个目录内,约定是给每个“控制器” 的“视图”一个分离的子目录。例如,我们的Depot 应用程序包含admin 和store“控制器”。结果,我们在app/views/admin 和app/views/store 目录下“模板”。 典型地 ...
在课程的最后两章我们会提到很多列名字,它们对“活动记录”有重大意义。这儿是总 结。 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 缓存。 ...
可在“模型”类内直接指定回调处理器,你可以创建分离的处理器类,它封装所有回调 方法。这些处理器可以在多个“模型”间共享。一个处理器类是个简单的类,它定义回调方 法(before_save(),after_create(),等等)。在app/models 目 ...
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 ...
“活动记录”控制“模型”对象的生命周期—它创建它们,监视它们的修改,保存,更 新和删除。使用“回调”,“活动记录”让我们的代码参与这种监视过程。我们可以在一个 对象的生命周期内让任何重大的事件来调用我们 ...
数据库列有个带限制的类型集: integers, strings, dates, 等等。典型地,我们的应 用程序却有很多类型—我们用类定义来表现我们代码的抽象。更好的事是,如果我们能够映 射数据库内的一些列信息到我们的高级抽象中—我们以同样方式包装行数据本身在“模型” 对象中。 例如,customer 表数据可能包括用于存储消费者姓名的列—或许是姓,名,称呼。在我 们的程序内,我们想包装这些与名字有关的列到一个单独的Name 对象中;三个列被映射到一 个单独的Ruby 对象中,与其它所的customer 表字段一同包含在消费者“模型”中。而且,在我们回头写“模型”时,我们希望从Name 对象抽 ...
Acts As List 在子表中使用acts_as_list,便能从父表的“视图”中得到像子表的行为。父表将能够 遍历子表,在列表内移动子表,或从列表内移除子表。 通过给每个子表一个位置数来实现列表。这意味着子表必须有个列来记录此位置 ...
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 ...
Global site tag (gtag.js) - Google Analytics