控制器简单介绍
一个简单的控制器中的例子
- class SimpleController < ApplicationController
- def index
- end
- end
可以看出,我们自己建立的控制器默认继承ApplicationController类。那ApplicationController类到底有什么作用呢
- # Filters added to this controller apply to all controllers in the application.
- # Likewise, all the methods added will be available for all controllers.
- class ApplicationController < ActionController::Base
- helper :all # include all helpers, all the time
- protect_from_forgery # See ActionController::RequestForgeryProtection for details
- # Scrub sensitive parameters from your log
- # filter_parameter_logging :password
- end
从上面的注释得知ApplicationController总是会包含所有的heipers以及对伪造表单的保护,在此类中定义的方法可以被所有的控制器访问同时在此添加过滤器将会应用于所有的孔控制器。
回到开头的例子
这里定义了一个方法index,这是一个空动作。里面没有包含任何指定的东西,它的默认视图为views/simple/index.rhtml,尽管我没有定义render :action => "index"。这就是Rails的约定优于配置。
甚至可以把index方法也省略掉,如
- class SimpleController < ApplicationController
- end
这样仍然能正确渲染视图index.rhtml,但这貌似也没什么意义。
控制器中的对象简介
控制器为执行实际操作的action和视图提供了一个上下文的环境,这个环境包括一个实用的对象,如request,params,cookies,response,session,flash,headers。
request介绍
request为访问的请求对象,包含一些请求相关的环境变量,部分方法如下
remote_ip;返回远程IP地址,如客户端有代理,则可能返回多个IP地址