1、模式
Ruby on Rails的模型层是通过ActiveRecord来提供的。ActiveRecord是一个对象关系映射(ORM)库,这一点与Hibernate和TopLink相似。ActiveRecord对象表现来自一个数据库表的单个记录。定义一个AR类是非常简单的,并且大多数配置被隐藏在默认约定之后:
class Page < ActiveRecord::Base
end
将其与一个效果相同的Hibernate定义进行对比:
/**
* @hibernate.class table="miners"
*/
public class Miner {
private Long id;
... more column vars ...
/**
* @hibernate.id generator-class="native"
*/
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
... more column getters and setters ...
}
你将注意的第一个区别是,在ActiveRecord的实现中没有结构或列名称的提及。这个代码段将参考页面表,并且自动生成Getter和Setter。这个类的一个实例的属性从数据库中得到,例如它们的类型。这些默认的约定多数可以在需要的时候可以被忽略,但是这个命名约定提供给Rails足够多的信息让你解放出来,让你解决手头上真实的问题。唯一需要进行配置的是建立最初的数据库连接;即database.yml:
development:
adapter: mysql
database: application_development
username: application
password: password
host: localhost
ActiveRecord的联合可以通过下面的代码来指定:
class User < ActiveRecord::Base
has_many :articles
end
class Article < ActiveRecord::Base
belongs_to :user
end
上面在Article类中的blongs_to语法告诉ActiveRecord,将来自user_id数据库的一个列关联到user上。它与上面的has_many和has_one宏具有相反的意思。通过这个知识,ActiveRecord可以实现某些有意思的功能,让其本身可以编写出非常具有可读性的代码。
article = Article.find(45)
user = article.user
users_articles = user.articles
2、控制器
控制器层被用来控制网站的流程。它是ActiveRecord和ActionView之间的数据中介。ActionController提供功能设施,处理和组织来自数据库和Web表单输入的数据,然后它将这些数据递交给ActionView,ActionView将这些数据插入模板并显示,在早期的Rails版本中把控制器看做创建URL路径的一种方法。在现在的社区中,每一个控制器代表着某一类抽象或具体的“资源”。这些资源通常有四个基本的操作:Create(创建)、Read(读取)、Update(更新)和Delete(删除) (CRUD)。大多数控制器具有七个核心的操作(index、show、new、create、edit、update和destroy)。
举个例子来说,一个事件搜索页面必须查询一个事件列表,并把它往上传递给视图,而且,这个事件列表将通过某些要求的参数实现参数化。
class EventsController < ApplicationController
def index
@events = Event.fulltext_find(params[:search_term])
end
# ... other actions
end
这儿Rails中有一些语法甜头(syntactic sugar),可以用来过滤客户端请求和以不同的方式来处理它们。这些语法有before_filter、after_filter和around_filter等。最常用的过滤器是before_filter:
class EventsController < ApplicationController
before_filter :login_required, :except => [:index]
# ... other actions
end
3、视图
标准的Rails模板引擎被称为ERb。ERb看上去非常像PHP:
<% form_for todo do |f| %>
<table>
<tr><td><%= f.date_select :due_at %></td></tr>
...
</table>
<% end %>
上面提到的CRUD体系在Rails框架的视图层上也同样存在。上面的form_for使用了通过todo ActiveRecord对象传递的信息,同时加以某些基本的约定,来为这个表单创建提交方法和URL。依附于这个表单的对象具有关于todo对性的信息。这种模式将自动的填充默认值,并且能够被定制和扩展以表现更复杂的格式。通过这些助手的帮助,Rails正在实现众多的设想,不过最终的结果是一个易懂、易维护的非常具有可读性的代码。
声明:LUPA开源社区刊登此文只为传递信息,并不表示赞同或者反对。

迷你博客
日志
相册
群组
分享
电影
问答
停车游戏
奴隶游戏
开源大搜索
项目点评
礼品中心
职业评测
开源博客
新闻阅读
考试练习
LW3DK开发
开源论坛
下载频道




查看全部评论(1) 最新评论