打印

[Rails 常用插件简介] browser_filters

本帖已经被作者加入个人空间

[Rails 常用插件简介] browser_filters

0:废话

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


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

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

ruby script/plugin http://martinx.googlecode.com/svn/trunk/plugins/browser_filters


2:使用
在你的application.rb中加上

inlucde BrowserFilters


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

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

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

  def self.included(controller)
    controller.send(:include, LinkPrefetchingBlock, SafariUnicodeFix, UnicodeContentType)
  end


UnicodeContentType 就是我们今天要讨论的主角,来看下代码

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

 controller.after_filter :set_content_type, :set_database_encoding


Done!


注:
1:Rails 默认的编码为UTF8
2:我们这里也是统一采用的UTF8
3:对原来的UnicodeContentType增加了一个 set_database_encoding 和xhr的判断。
本帖最近评分记录
  • bayerlin R币 +5 精品文章 2008-1-16 14:04
  • skyover R币 +4 谢谢分享。 2008-1-16 11:01

TOP

这个成了一个系列了,改天整理到首页上去。
谢谢大家加入Ruby中文社区!
[寻找您身边的Rubyist.]

TOP

好久没写了,呵呵,最近赶两篇。过年了,算我给RC上朋友的红包:)

TOP

不知道有没有一个专门的插件索引。现在类似于第三方的东西太多了,不知道的话,自己就会一直造车轮子。
谢谢大家加入Ruby中文社区!
[寻找您身边的Rubyist.]

TOP

有两个:
这个时间长点
http://agilewebdevelopment.com/plugins

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

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

[ 本帖最后由 martin 于 2008-1-16 11:26 编辑 ]

TOP

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

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


查询本论坛的帖子
引用:
q cache
例如:查询常用插件关键字
q cache
稍等片刻变会返回结果

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

呵呵,Enjoy

TOP

试试你的bot

TOP

以前都是自己手动作这些事情
看到martin的post,自己到rails官方plugin目录下查了一下,被我找到了
比较疑惑的是这个plugin被放到legacy目录下面了,这貌似一个被deprecate的信号?不知为何
http://svn.rubyonrails.org/rails/plugins/legacy/browser_filters/

TOP

2008-12-05 04:54 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.61