`
helloqidi
  • 浏览: 11896 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

beast学习笔记——2,forums_controller

    博客分类:
  • ROR
阅读更多

beast学习笔记——2,forums_controller

参考

 
 
 
1,
(1)代码:
before_filter :admin_required, :except => [:index, :show]
(2)表示:
前置过滤器,对index,show方法除外
(3)其他:
admin_required方法存储在哪里?在forums_controller、application_controller中都没有,但是application_controller中有一个include AuthenticatedSystem,于是到 /lib目录中authenticated_system.rb,里面有定义
 
2,
(1)代码
session[:forums_page] = nil
(2)表示:
当进入显示所有项index方法时,清空session中存储的页数forums_page
(3)其他
session存储在哪里?可以看看enviroment.rb中的”config.action_controller.session_store“,常用的是三种:
【1】rails2以上的版本,默认把session放在基于cookie的客户端中即session以 hash的格式每次作为cookie发送到客户端浏览器来保持
rails1版本默认是CGI:Session:PStore,存储在服务器上的一个PStore格式的文件中。
【2】:action_record_store,存储在数据库session表中。
【3】:drb_store,存储在一个DRb服务器上。
注:当我们向一个域名发送一个请求的时候,如果存在这个域名的cookie,浏览器会自动把cookie附带上。
3
(1)代码
@forums = current_site.ordered_forums
(2)表示
创建forums实例变量,存储什么?为什么不是标准的 @forums = Forum.find( :all, : order => "position"),
【1】这里有一个当没有站点时的转向问题(其实在安装beast时rake app:bootstrap已经引导你建立站点了)。
可以导到current_site在/lib目录中authenticated_system.rb里面有定义:
def current_site
      @current_site ||= Site.find_by_host(request.host) or raise Site::UndefinedError
end
 
这个方法是先是用||= 看@current_site有没有值,如果没有就用Site.find_by_host(request.host)获取一个值赋给@current_site(这里request.host是会得到主机的名称,我在本机上运行,这会得到localhost),如果Site里还没有这个值,就再执行 raise Site::UndefinedError。

这个异常应该是自定义的。打开Site模型文件app/model/site.rb,就会看到
class UndefinedError < StandardError; end
这一行,原来UndefinedError是继承至StandardError类。

异常被抛出来,就得处理它。其实,我们之前在浏览application_controller.rb代码,就发现了一个rescue_from方法:
rescue_from Site::UndefinedError do |e|
    redirect_to new_site_path
end

看到这里,我想都明白为什么在第一次运行Beast时,会重定向到新建站点的页面了。
【2】.ordered_forums表示什么,见site.rb中的:
  def ordered_forums(*args)
    forums.ordered(*args)
  end
再见forum.rb中的:
  def self.ordered
    find :all, :order => 'position'
  end
于是,.ordered_forums表示查询forum并按照position排序
4,
(1)代码
    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @forums }
    end
(2)表示
表示,当HTTP首部的Accept-Type要求返回的类型为text/html时,view指向默认的index.html。当要求返回的类型为xml/text时,view将会指向一个xml,此xml由模型forum自动生成
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics