[Rails 常用插件简介] browser_filters

上一篇 / 下一篇  2008-01-16 11:29:27 / 个人分类:Rails 常用插件简介

查看( 14 ) / 评论( 7 )
0:废话

不要再浪费时间继续讨论乱码的问题了,让这一切终结吧...


我想大家的项目一般在开始的时候,总是会在application.rb中加上个filter set_content_type 来设置编码的问题,简单,也很容易。是的,确实,但是为啥不用browser_filters这个插件呢?她做的事情和你做的是一样的,只不过改成了插件而已。你再也不用关心编码的问题了。

1:安装
DHH写的,我稍微做了点修改,可以按如下方式安装

CODE:

ruby script/plugin http://martinx.googlecode.com/svn/trunk/plugins/browser_filters2:使用
在你的application.rb中加上

CODE:

inlucde BrowserFilters结束了,一切都变的安静了...
再也没有刚入门的伙计再讨论所谓乱码的问题了。
Cheers!

3:深入代码研究下
道理很简单,用included,当你inlucde BrowserFilters时候,她会加上对应的filter。我们先来复习下included是干嘛用的

CODE:

module SomeModule
  class<<self
    def included(target)
      puts "#{target} 使用了include SomeModule"
    end
  end
end

class Test
  include SomeModule
end
这样,在你调用Test的时候会在后台看到
Test  使用了include SomeModule.

道理就这么简单,我们来看下BrowserFilters,当BrowserFilters被include的时候,她会include其他的三个lib

CODE:

  def self.included(controller)
    controller.send(:include, LinkPrefetchingBlock, SafariUnicodeFix, UnicodeContentType)
  end
UnicodeContentType 就是我们今天要讨论的主角,来看下代码

CODE:

module UnicodeContentType
  def self.included(controller)
    controller.after_filter :set_content_type, :set_database_encoding
  end

  private
  def set_content_type
    if request.xhr?
      headers["Content-Type"] ||= "text/javascript; charset=utf-8"
    else
      headers["Content-Type"] ||= "text/html; charset=utf-8"
    end
  end

  def set_database_encoding
    suppress(ActiveRecord::StatementInvalid) do
      ActiveRecord::Base.connection.execute 'SET NAMES UTF8'
    end
  rescue
    #nop
  end
end
哦,这个不就是我在application.rb中写的那段代码吗?没错就是他。当UnicodeContentType被include的时候,新建了两个filter

CODE:

controller.after_filter :set_content_type, :set_database_encodingDone!


注:
1:Rails 默认的编码为UTF8
2:我们这里也是统一采用的UTF8
3:对原来的UnicodeContentType增加了一个 set_database_encoding 和xhr的判断。

TAG:

SKYOVER之陋室 admin 发布于2008-01-16 11:00:29
这个成了一个系列了,改天整理到首页上去。
Martin's Thought martin 发布于2008-01-16 11:07:54
好久没写了,呵呵,最近赶两篇。过年了,算我给RC上朋友的红包:)
SKYOVER之陋室 admin 发布于2008-01-16 11:18:57
不知道有没有一个专门的插件索引。现在类似于第三方的东西太多了,不知道的话,自己就会一直造车轮子。
Martin's Thought martin 发布于2008-01-16 11:21:35
有两个:
这个时间长点
http://agilewebdevelopment.com/plugins

这个是新起之秀
http://www.railsify.com/

你可以到这里先检索下:)

[ 本帖最后由 martin 于 2008-1-16 11:26 编辑 ]
Martin's Thought martin 发布于2008-01-16 13:57:56

QUOTE:

原帖由 skyover 于 2008-1-16 11:18 发表
不知道有没有一个专门的插件索引。现在类似于第三方的东西太多了,不知道的话,自己就会一直造车轮子。
我做了个小bot,你可以加 rubyistcn@gmail.com 到你的gtalk中,即可以直接查询plugins

使用方法
插件查询:

QUOTE:

p 插件的名称
例如:查询cache相关的插件
p cache
稍等片刻变会返回结果


查询本论坛的帖子

QUOTE:

q cache
例如:查询常用插件关键字
q cache
稍等片刻变会返回结果

注:
1:暂时论坛查询中文无返回结果
2:这个刚写的还没放到服务器上,正在我的本机测试中,如果断了,说明我本地的bot挂了,可以加我的gtalk: martin.xus@gmail.com 告诉我下:)

呵呵,Enjoy
yudi发布于2008-01-17 02:06:17
试试你的bot
lgn21st发布于2008-01-17 14:00:23
以前都是自己手动作这些事情
看到martin的post,自己到rails官方plugin目录下查了一下,被我找到了
比较疑惑的是这个plugin被放到legacy目录下面了,这貌似一个被deprecate的信号?不知为何
http://svn.rubyonrails.org/rails/plugins/legacy/browser_filters/
我来说两句

(可选)

日历

« 2009-07-05  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 286
  • 日志数: 19
  • 建立时间: 2007-08-13
  • 更新时间: 2008-01-23

RSS订阅

Open Toolbar