
Active Controller
文章平均质量分 64
jbf034a
这个作者很懒,什么都没留下…
展开
-
cookies、params、request、session
1、cookiescookies对象封装了客户端的Cookie信息cookies[:name] = “chengang”cookies[:current_time] = Time.now.to_scookies[:key1] = {:value=>”four”, :expires=>10.days.from_now}:expires设置cookies到期时间,从现在起10天后到...原创 2008-06-17 21:44:05 · 236 阅读 · 0 评论 -
Flash—“动作”间的通信
Flash—“动作”间的通信当我们使用redirect_to()来传输控制给其它“动作”时,浏览器生成一个单独的请求来要求那个“动作”。那个请求将通过我们应用程序的一个“控制器”对象的新实例内被处理—在原先“动作”内设置的实例变量在被重定向“动作”内的处理代码中将不再有效。但是有时候我们需要在这两个实例之间通信。我们可以使用叫flash 的功能做到这一点。flash 是个临时的...原创 2008-08-01 13:37:49 · 116 阅读 · 0 评论 -
“过滤器”(before,after,around)
“过滤器”可以让你在你的“控制器”内写代码来包装由“动作”完成的处理—你可以写个代码块,并在你的控制器(或你的“控制器”的子类)内的任何数量的“动作”之前或之后来调用它。这是个强大功能。使用“过滤器”,我们可以实现检验计划,日志,responsecompression,甚至是定制的“应答”。Rails 支持三种类型的“过滤器”:before,after,和around。“过滤器...原创 2008-08-01 14:18:10 · 690 阅读 · 0 评论 -
verify(验证)
before“过滤器”的通常用法是在尝试一个“动作”之前确认是否遇到某些条件。Rails确认机制是一个抽取动作,它可帮助你比使用“过滤器”代码更简明地表述前置条件。例如,我们可能请求“会话”在我们的博客允许写评论前包含一个有效的用户。我们可以使用一个确认来表示这种思想,如class BlogController < ApplicationControllerverify :on...原创 2008-08-01 14:18:51 · 3125 阅读 · 0 评论 -
Caching(缓存)“缓存”什么
相关文献([url]http://www.ibm.com/developerworks/cn/web/wa-rails1/#N1007C[/url])许多应用程序似乎都花费很多时间做重复的事情。博客应用程序提交当前文章列表给每个访问者。商店应用程序在同一页显示产器信息给请求它的每个人。所有重复都浪费了我们服务器的资源时间。提交博客页面可以要求半打的数据库查询,它可以一直运行很多Ru...原创 2008-08-02 17:24:19 · 826 阅读 · 0 评论 -
Sweeper实例
expir_xxx 方法会工作的很好,但是在你的“控制器”中它们也要与缓存功能的代码合作。每次你修改数据库内的一些东西时,你也必须对它可能影响到的被缓存页做些工作。在应用程序较小时这很容易,但应用程序快速增长时这就会变得很困难。在一个“控制器”内的修改可能会影响到另一个“控制器”中被缓存的页。“帮助方法”内的商业逻辑,其实不应该知道有关HTML 页的信息,现在需要担心的是失效被缓存...原创 2008-08-03 22:16:40 · 276 阅读 · 0 评论 -
基于时间缓存
def index when_fragment_expired 'causes_list', 15.minutes.from_now do @causes = Cause.find_all_ordered endend如果能够容忍数据稍微有些陈旧,那么使用定时的到期机制将可以极大地简化缓存策略。对于每个被缓存的元素,只需指定想要缓存的内容、可生成动态内容的任何控制器...原创 2008-08-06 00:18:24 · 231 阅读 · 0 评论 -
acts as list/acts as tree
[color=red]Acts As List[/color]在子表中使用acts_as_list,便能从父表的“视图”中得到像子表的行为。父表将能够遍历子表,在列表内移动子表,或从列表内移除子表。通过给每个子表一个位置数来实现列表。这意味着子表必须有个列来记录此位置。如果我们称它为列position,Rails 会自动使用它。如果不这么称呼它,我们需要告诉Rails 它的...原创 2008-08-07 00:03:03 · 251 阅读 · 0 评论 -
“聚合”(Aggregation)
数据库列有个带限制的类型集: integers, strings, dates, 等等。典型地,我们的应用程序却有很多类型—我们用类定义来表现我们代码的抽象。更好的事是,如果我们能够映射数据库内的一些列信息到我们的高级抽象中—我们以同样方式包装行数据本身在“模型”对象中。例如,customer 表数据可能包括用于存储消费者姓名的列—或许是姓,名,称呼。在我们的程序内,我们想...原创 2008-08-07 00:20:16 · 593 阅读 · 0 评论 -
Callbacks
“活动记录”控制“模型”对象的生命周期—它创建它们,监视它们的修改,保存,更新和删除。使用“回调”,“活动记录”让我们的代码参与这种监视过程。我们可以在一个对象的生命周期内让任何重大的事件来调用我们写的代码。在这些“回调”内,我们可以完成复杂的确认,映射列的值并将它们传递到数据库外部,甚至可阻止某些操作的完成。我们已经在“动作”内看到这个功能。当我们添加用户管理代码给我们的Depo...原创 2008-08-10 15:46:29 · 113 阅读 · 0 评论 -
Timestamping Records
before_create 和before_update 回调有种潜在的用法是timestamping 行。class Order < ActiveRecord::Basedef before_createself.order_created ||= Time.nowenddef before_updateself.order_modified = Time.now...原创 2008-08-10 15:57:46 · 204 阅读 · 0 评论 -
Callback Objects
可在“模型”类内直接指定回调处理器,你可以创建分离的处理器类,它封装所有回调方法。这些处理器可以在多个“模型”间共享。一个处理器类是个简单的类,它定义回调方法(before_save(),after_create(),等等)。在app/models 目录内为这些处理器类创建源文件。在“模型”对象内使用处理器,你创建这个处理器类的实例,并传递那个实例给各种回调定义。几个例子会让这...原创 2008-08-10 16:04:08 · 158 阅读 · 0 评论 -
“会话”存储比较和失效与清理
[color=red]比较“会话”存储选项[/color]对于这么多“会话”选项,我应该为应用程序选择哪一个呢?回答是“依赖”。如果排除过于单纯的内存存储,太多约束的文件存储,和过于复杂的memcached 的话,就剩下在PStore,ActiveRecordStore 和DRb 存储之间选择了。我们可以交叉比较这些选项的性能和功能。Scott Barron 对这些存储选项有着...原创 2008-07-31 22:58:51 · 252 阅读 · 0 评论 -
“会话”存储
在存储你的“会话”数据时,Rails 有很多选项。每个选项即好也不好。我们先列出选项的清单,然后再比较它们。“会话”存储机制使用DEFAULT_SESSION_OPTIONS 哈希表的:database_manager 参数设置。其它的选择是:1、:database_manager => CGI::Session::Pstore 这是Rails 使用的缺省“会话”存储机制。每个...原创 2008-07-31 22:56:59 · 235 阅读 · 0 评论 -
“会话”session
Rails 的“会话”是个类似哈希表的结构,它在请求期间会一直有效。不像原始的cookie,“会话”可以持有任何对象(只要这些对象可以被marshale),来保存web 应用程序内的状态信息。例如,在我们的store 应用程序中,我们使用了一个“会话”在请求之间持有购物车对象。此购物车对象在我们的应用程序中使用起来应该像其它对象一样。但是Rails 安排在每个请求处理的尾部保存购物车,更重要的...原创 2008-07-31 22:54:12 · 168 阅读 · 0 评论 -
处理流程
在了解controller控制器的处理流程之前,首先需要了解ROR是如何从整体上对用户请求进行处理的,以URL地址http://127.0.0.1:3000/item/list为例,当用户访问这个地址时,ROR按顺序自动完成4个过程,1、搜索app/controllers目录,查看是否存在item_controller.rb文件2、若有则进行加载,并实例化ItemController类...原创 2008-07-29 14:25:08 · 199 阅读 · 0 评论 -
路由请求(定制URL-map.connect)
到现在为上,本书中我们已经不在烦恼,Rails 是如何映射一个请求如store/add_to_cart/123 给一个特定的“控制器”和“动作”了。现在我们向深处看看。rails 命令为一个应用程序生成最初的文件集。这些文件中的一个是config/routes.rb。它为应用程序包含了“路由器”信息。如果你查看此文件的缺省内容,忽略注释的话,你会看到下面这样。ActionC...原创 2008-07-29 15:06:44 · 481 阅读 · 0 评论 -
还原URL-url_for()
生成URL“路由器”接受一个URL,并解码它到参数集中,这些参数再由Rails 分派给适当的“控制器”和“动作”(也按此方式潜在地设置额外的参数)。但是这只是故事的一半。我们的应用程序也需要创建能引用其自身的URL。例如,每次显示一个表单时,表单需要被连接回一个“控制器”和“动作”。但应用程序的代码不必知道URL 格式的编码信息;它们被看成是被调的参数,“路由器”用这些参数完成...原创 2008-07-29 15:39:06 · 530 阅读 · 0 评论 -
有名路由
到现在我们已经在routes.rb 文件中使用map.connect 创建了匿名的“路由器”。通常这就足够了;Rails 会做好由我们传递给url_for()等的给定参数创建的URL 的挑选工作。当然,我们可以给出“路由器”的名字,以让我们应用程序更容易理解。这不会修改引入URL的解析,但它会让我们在代码中能明确指定生成URL 的“路由器”。你在“路由器”定义内使用一个名字而不是c...原创 2008-07-29 16:13:33 · 104 阅读 · 0 评论 -
action 方法-hide_action
当“控制器”对象处理请求时,它查找与引入“动作”同名的public 实例方法。如果找到了,那个方法就会被调用。如果没找到,但“控制器”实现了method_missing()方法,则此方法会被调用,并传递“动作”的名字做为它的第一个参数,然后用一个空的参数列表做第二个参数。如果没有方法被调用,“控制器”会查找与当前“控制器”和“动作”同名的“模板”。如果找到,这个“模板”会被直接提交...原创 2008-07-29 23:00:01 · 201 阅读 · 0 评论 -
开发环境中的预设对象(request、params)
“控制器”为“动作”设置环境。环境被建立在实例变量内,但你应该在“控制器”内使用相应的存取器方法。[color=red]/request/[/color]request对象对应于用户的各种请求,request对象详细地记录了每个特定的物理信息,它允许开发人员通过一定的方法来提取这些信息。request 对象的有用属性包括:1、domain(),它返回request 的最后两个d...原创 2008-07-29 23:33:26 · 296 阅读 · 0 评论 -
应答1-提交模板(render)方法
模板是个文件,它定义一个应答的内容。Rails 支持两种格式的模板:rhtm,它是包含有Ruby 代码和构建器的HTML,更多地用于程序方式。习惯上,app/views/control/action.rhtml 或者app/vies/controller/action.rxml 文件内的模板用于“控制器”控制“动作”。app/views 缺省是名字的部分。它可以被覆写,通过设置Acti...原创 2008-07-29 23:52:12 · 213 阅读 · 0 评论 -
应答2-发送文件和其它数据(send_data)
我们已经看了在“控制器”内提交模板(render)和发送字符串(render_to_string)。应答的第三个部分是发送数据(典型地,但不是必须的,是文件的内容)给客户端。A、send_data 发送包含二进制数据的字符串给客户端。send_data(data, options...)发送一个数据流给客户端。典型地浏览器将结合使用内容类型与部署,两者在选项内设置,来决定这个用...原创 2008-07-30 00:25:32 · 1320 阅读 · 0 评论 -
应答3-重定向(redirect_to)
一个HTTP redirect 被从服务端发送给客户端,以应答一个请求。它会说,“我不能处理这个请求,但这儿有些人能处理”。Redirect 应答包括一个URL,它是客户端应该试着下次发送同样的状态信息给这个redirect,而不管它是持久的(状态码301)还是临时的(状态码307)。有时,当web 页面被重新改编时,redirect 会被使用;访问旧位置页面的客户端将被引到页面的...原创 2008-07-30 00:34:45 · 2295 阅读 · 0 评论 -
对用户应答(1,2,3)
“控制器”的一部分工作是响应用户。有三个基本方式来完成个工作:1、最通用的方式是提交一个模板。在MVC 图中,模板是“视图”,它从“控制器”获得信息并使用“控制器”来生成一个对浏览器的应答。2、“控制器”可以直接返回一个字符串给浏览器而不是调用一个“视图”。这很少使用,但可用于发送一个错误信息。3、“控制器”可以发送其它数据给客户端(有时候不是HTML)。这典型地用...原创 2008-07-30 00:36:49 · 109 阅读 · 0 评论 -
cookies
Cookie 允许web 应用程序从浏览器“会话”中得到类似哈希表的功能:你可以在客户端浏览器上存储名字字符串,并在随后的请求中可按名字取回相应的值。这太有意义了,因为HTTP,在浏览器和web 服务端之间使用的协议,是无状态的。Cookie提供了用于克服这一限制的手段,以允许web 应用程序在两次请求间保留数据。Rails 在背后为cookie 抽象出了一个方便的,简单的接口。“...原创 2008-07-31 22:40:24 · 233 阅读 · 0 评论 -
Magic Column Names(自动的列名)
在课程的最后两章我们会提到很多列名字,它们对“活动记录”有重大意义。这儿是总结。1、created_at, created_on, updated_at, updated_on 用创建行的或最后更新行(_at形式)或(_on 形式)的时间戳来自动更新。2、lock_version Rails 将跟踪行版本号并完成乐观锁。如果表包含lock_version 的话。3、type 由...原创 2008-08-10 16:09:47 · 260 阅读 · 0 评论