`
jbf034
  • 浏览: 153581 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
从数据库中读取数据首先就要涉及到确定你所关心的特定的数据行--你必须给Active Record 一些条件值,它将返回包含匹配数据行的对象。 查找表中的一行记录最简单的方法是指定它的主键。每个model 类都支持find()方法, 它接受一个或多个主键的值作为参数。如果只是给定一个主键,它返回一个对象,该对象包 含对应记录行的数据(或者是抛出RecordNotFound 异常)。如果给定了多个主键,find()返回一个对应的对象数组。注意在这种情况下,如果任何一个id 没有找到(所以如果方法返回并没引发一个错误,结果数据的长度将等于被做为参数传递的id 数量),就会返回RecordNotFoun ...

CRUD—Create

在对象-关系的范式中,表被表现为类,并且表内的行被对应于那个类的对象。因此我们 通过创建相应类的对象来创建表中的行,是顺理成章的事。 1、我们可以通过调用Order.new() 来创建一个对象,表示orders 表中的行。然后我们可以填充各种属性的值(对应表的各个列)。 最后,我们调用对象的save()方法存储回order 到数据库中。没有这个方法调用的话,order 只会存在于本机的内存中。 an_order = Order.new an_order.name = "Dave Thomas" an_order.email = "dave@pragprog.com& ...
连接数据库 Active Record 把数据库连接的概念抽象出来,有助于程序处理各种特殊数据库的底层 细节。相反,Active Record 应用程序使用通常的调用,代理了一组数据库适配器的细节。 (This abstraction breaks down slightly when code starts to make SQL-based queries, as we’ll see later.) 指定连接的一种方式是使用establish_connection()类方法。[在Rails 应用程序中, 另一种特殊的连接方式,我们在178 页讨论。]举例来说, ...
你可能已经注意到了我们的例子数据库内的所有表都定义有一个整数列叫id,做为表的 主键。这是Active Record 的约定。 “请等等!”你喊道。“我的order 表的主键应该是定单号或一些意义的列?为什么使 用一个没有意义的主键, ...
有时候这样做很方便,存储包含任意Ruby 对象的属性直接到数据库的表中。Active Record 通过序列化Ruby 对象到一个字符串中(使用YAML 格式)来支持这种方式,并且存储这 个字符串到数据库内对应此属性的列中。在schema 中,这个列必须被定义为text 类型。 因为Active Record 通常将映射一个character 或text 列为一个纯Ruby 字符串,在你 想获得这个功能的优势时,你需要告诉Active Record 使用序列化。例如,我们想记录最后 五位购买者做为我们客户。我们将创建一个包含一个text 列的表来保存这些信息。 create table purc ...
有些数据库支持boolean 列类型,而有些不支持。这使得Active Record 很难抽象化 boolean。例如,如果基础数据库没有boolean 类型,一些开发者使用char(1)列包含”t” 或”f”来表示true 或false。而其它开发者使用整数列,0 是false,1 是true。即使数据 库直接支持boolean 类型(如MySQL 和它的bool 列类型),它们也只是在内部存储0 或1。 问题在Ruby 中数字0 和字符”f”两者在条件句中被解释为true 值。[Ruby 有个true 的简 单定义。不是nil 或常量false 的所有值都是true。]这意味着如果你直接使用 ...
Active Record 对象对应数据库表中的行。对象的属性对应表中的列。你可能已经注意 到我们定义的Order 类并没有提到orders 表中任何列。这是因为Active Record 是在运行期 间动态决定它们。Active Record 在数据库端的schema 上反射,以配置 ...
当你创建一个ActiveRecord::Base 的子类时,实际上是包装一个数据库表。缺省情况下, Active Record 假定表名字是类名字的复数形式。如果类名包含多个以大写字母开头的单词, 表名会假定以下划线分隔这些单词。一些无规律的复数形式也会被处理。 这些规则反应了DHH(rails 的作者)的理念:类名字应该是单数,而表名字应该是复数。 如果你不喜欢这种做法,你可以在配置文件中设置一个全局变量关闭它(config 目录下的 environment.rb 文件)。 ActiveRecord::Base.pluralize_table_names = false 用于让表名字成为复数的 ...
首先想到的和广泛使用的是,写测试代码!rails 使得写unit test 和functional test 变得容易。使用了它们,你将发现bug 的出现率会显著减少。测试是廉价的保单。 测试会告诉你哪些东西起作用,哪些不起作用,有助于你隔离有问题的代码。但有时, 出现问题的原因不是非常明显。 如果问题出现在一个model 中,你可能想在web 程序外来跟踪相关的类。script/console 把你的rails 程序带到irb 的会话中,让你有机会测试方法。下面是当我们使用控制台来更新 一个产品的单价时的会话。 depot> ruby script/console Loading dev ...
Active Support 给所有字符串添加了些方法以支持Rails 将名字从单数转换为复数,小 写变成混合大小写等等。通常一般的应用程序只用到两个。 puts "cat".pluralize #=> cats puts "cats".pluralize #=> cats puts "erratum".pluralize #=> errata puts "cats".singularize #=> cat puts "errata".singularize #=> ...

时间扩展

Time 类获得了一组有用的方法,帮助你计算有关的时间。 now = Time.now puts now #=> Tue May 10 17:15:59 CDT 2005 puts now.ago(3600) #=> Tue May 10 16:15:59 CDT 2005 puts now.at_beginning_of_day #=> Tue May 10 00:00:00 CDT 2005 puts now.at_beginning_of_month #=> Sun May 01 00:00:00 CDT 2005 puts now.at_beginning_of_ ...

扩展Numbers

扩展Numbers 类Fixnum 获得了两个实例方法even? 和odd? 。 所有数字对象获得了一套缩放方法。 puts 20.bytes #=> 20 puts 20.kilobytes #=> 20480 puts 20.megabytes #=> 20971520 puts 20.gigabytes #=> 21474836480 puts 20.terabytes #=> 21990232555520 还有基于时间的缩放方法。这些转换它们的被调到等同的秒中。Months()和years()方 法是大致的—月数是30 天,年的天数是365 天。 puts ...
首先问大家一个问题: 编程语言(比如ruby)中什么数据类型最重要?可能大家会说到──对象,数组.... 其实是String(字符串) 而对字符串的处理很大一部分依赖匹配,而匹配方法中,正则表达式是“降龙十八掌”,下面我们就学习正则表达式 首先是 元字符: . :匹配除换行符以外的任意字符 [x]:匹配中括号中的任意一字符 如[abc]则匹配a或b或c [^x] :匹配除了x以外的任意字符 :如[^abc] 则匹配除a/b/c以外的任意一字符 ^ :匹配开始地方  如:^a 表示匹配以a开头的,^[a-z] 表示以小写任意一字母开头的 $ :匹配结束地方 如:a$ 表示匹配以a结尾的 ...
Filter chain skipping --- 跳过过滤器链 有时候在一个超类内指定对大多数子类,而不是全部子类有效的过滤器链会带来工作上的方便。 class ApplicationController < ActionController::Base before_filter :authenticate end class WeblogController < ApplicationController # 会执行:authenticate 过滤器 end class SignupController < ApplicationControl ...
<%= error_messages_for("order") %> 显示有关order类中的错误信息 <%= render_component(:action => "display_cart") %> 在一个rhmtl中加裁一个方法 Rails 列名字约定指出:datetime 字段应该以_at 结尾,date 字段应该以_on 结尾。以 这种自然的方式对列命名,如last_edited_on 和sent_at。 这种约定也用于自动的时间戳字段, MD5加密方式: require 'md5' puts MD5.hex ...
Global site tag (gtag.js) - Google Analytics