1、模式 Ruby on Rails的模型层是通过ActiveRecord来提供的。ActiveRecord是一个对象关系映射(ORM)库,这一点与Hibernate和TopLink相似。ActiveRecord对象表现来自一个数据库表的单个记录。定义一个AR类是非常简单的,并且大多数配置被隐藏在默认约定之后:
将其与一个效果相同的Hibernate定义进行对比:
你将注意的第一个区别是,在ActiveRecord的实现中没有结构或列名称的提及。这个代码段将参考页面表,并且自动生成Getter和Setter。这个类的一个实例的属性从数据库中得到,例如它们的类型。这些默认的约定多数可以在需要的时候可以被忽略,但是这个命名约定提供给Rails足够多的信息让你解放出来,让你解决手头上真实的问题。唯一需要进行配置的是建立最初的数据库连接;即database.yml:
ActiveRecord的联合可以通过下面的代码来指定:
上面在Article类中的blongs_to语法告诉ActiveRecord,将来自user_id数据库的一个列关联到user上。它与上面的has_many和has_one宏具有相反的意思。通过这个知识,ActiveRecord可以实现某些有意思的功能,让其本身可以编写出非常具有可读性的代码。
2、控制器 控制器层被用来控制网站的流程。它是ActiveRecord和ActionView之间的数据中介。ActionController提供功能设施,处理和组织来自数据库和Web表单输入的数据,然后它将这些数据递交给ActionView,ActionView将这些数据插入模板并显示,在早期的Rails版本中把控制器看做创建URL路径的一种方法。在现在的社区中,每一个控制器代表着某一类抽象或具体的“资源”。这些资源通常有四个基本的操作:Create(创建)、Read(读取)、Update(更新)和Delete(删除) (CRUD)。大多数控制器具有七个核心的操作(index、show、new、create、edit、update和destroy)。 举个例子来说,一个事件搜索页面必须查询一个事件列表,并把它往上传递给视图,而且,这个事件列表将通过某些要求的参数实现参数化。
这儿Rails中有一些语法甜头(syntactic sugar),可以用来过滤客户端请求和以不同的方式来处理它们。这些语法有before_filter、after_filter和around_filter等。最常用的过滤器是before_filter:
3、视图 标准的Rails模板引擎被称为ERb。ERb看上去非常像PHP:
上面提到的CRUD体系在Rails框架的视图层上也同样存在。上面的form_for使用了通过todo ActiveRecord对象传递的信息,同时加以某些基本的约定,来为这个表单创建提交方法和URL。依附于这个表单的对象具有关于todo对性的信息。这种模式将自动的填充默认值,并且能够被定制和扩展以表现更复杂的格式。通过这些助手的帮助,Rails正在实现众多的设想,不过最终的结果是一个易懂、易维护的非常具有可读性的代码。 |