rails plugins

    routing-filter

    30 Nov 2009

    routing-filter提供了强大的用于扩展Rails routing的功能。

    来看看两个例子

    1. 分页,一般使用经典的will_paginate插件生成的url是这样的: /posts?page=2,不过/posts/page/2如何呢?

    2. locale,比如我们根据用户不同的locale,显示不同语言版本的页面,这样的url很可能是/posts?locale=zh,不过/zh/posts如何呢?

    我个人都比较倾向于后面一种写法。用routing-filter可以帮助我们快速地完成这个转换工作。

    routing-filter默认自带了以上两种url的转换器。用起来也是超级简单,只要在config/routes.rb文件中定义

    ActionController::Routing::Routes.draw do |map|
      map.filter 'pagination'
      ...
    end
    ActionController::Routing::Routes.draw do |map|
      map.filter 'locale'
      ...
    end

    你也可以很容易的创造自己的url...

    Read More

    Tags 


    使用active_scaffold做为项目的后台管理

    08 Jul 2009

    最近做了一个很小的网站,需要一个简单的后台管理来对数据进行审核,由于只是个人用用,不想太浪费时间,就选用active_scaffold插件来做后台管理。对于小项目来说,应用active_scaffold可以快速地构建起项目的后台管理,自己不需要写view,相信大多数程序员都不怎么喜欢吧,controller也只需简单的配置即可。

    下面介绍一下我使用active_scaffold作为后台管理的方式吧:

    1. 在routes.rb中定义admin namespace

    map.namespace :admin do |admin|
      admin.connect 'admin/:controller/:action/:id'
      admin.connect 'admin/:controller/:action/:id.:format'
    end

    2. 定义AdminController基类,指明其子类必须是admin用户才能操作,以及layout

    # app/controller/admin_controller.rb
    class AdminController < ApplicationContr...
    Read More

    Tags 


    haml

    18 Apr 2009

    最近做公司的项目,接触到了haml。真是耳目一新,语法太简洁了,页面代码量也少了,也不会出现标签不匹配的问题了,用起来非常爽!下面我来介绍如何在rails中使用haml

    1. 创建测试工程:

    $rails test_haml
    $cd test_haml

    2. 生成post模型:

    $script/generate scaffold post title:string content:text
    $rake db:migrate

    3. 安装haml插件:

    $script/plugin install git://github.com/nex3/haml.git

    4. 修改view文件的erb为haml:

    # app/views/layouts/posts.html.haml
    !!! XML
    !!!
    %html{html_attrs('en')}
      %head
        %meta{'http-equiv' = 'content-type', :content = 'text/html;charset=UTF-8'}
        %title= Posts: #{controller.action...
    Read More

    Tags 


    sweeper

    17 Apr 2008

    sweeper插件用于自动生成清扫缓存的sweeper类,监视特定的model,根据相应的事件触发其行动,下面是一个example:

    1. 首先生成项目和初始数据:

    $ rails test_sweeper
    $ cd test_sweeper
    $ script/generate scaffold post title:string body:text
    #db/migrate/001_create_posts.rb
    (1..50).each do |num|
      Post.create(:title => "test#{num}", :body => "Test#{num}")
    end
    $ rake db:migrate

    2. 安装插件:

    $ script/plugin install http://topfunky.net/svn/plugins/sweeper

    3. 生成Sweeper类,该类在model增删改之后将缓存页面清除:

    $ script/generate sweeper post after_save before_destroy
    #app/models/post_sweeper.rb...
    Read More

    Tags 


    FlashObject

    26 Mar 2008

    自从youtube横空出世之后,网上flash视频在线观看越来越流行了,flashobject插件就提供了非常方便的构建在线flash视频的功能,它是基于http://blog.deconcept.com/swfobject之上的应用。下面来看个实例:

    1. 创建工程:

    $rails test_flashobject_helper
    $cd test_flashobject_helper

    2. 安装插件:

    $script/plugin install http://lipsiasoft.googlecode.com/svn/trunk/flashobject_helper

    3. 生成controller,修改view页面:

    $script/generate controller flashs
    #app/views/layouts/application.html.erb
    <%= javascript_include_tag :defaults %>
    <%= javascript_include_tag "flashobject" %>
    
    
    <%= @content_for_...
    Read More

    Tags 


    Annotate models

    24 Mar 2008

    Rails的约定优于配置和Ruby的动态性,使得model类变得十分简洁,但是也带来了一个问题:如果你想知道一个model有哪些属性时,必须去查看数据库或者migration,这给开发带来了极大的不便。Annotate models插件很好地解决了这个问题,它在model类的起始处以注释的形式写明了所有的属性,下面来看个例子:

    1. 创建工程:

    $rails test_annotate_models
    $cd rails test_annotate_models

    2. 安装插件:

    $script/plugin install http://repo.pragprog.com/svn/Public/plugins/annotate_models

    3. 生成测试模型:

    $script/generate model post title:string body:text
    $rake db:migrate

    4. 生成annotation:

    $rake annotate_models

    5. 效果:

    # == Schema Information
    # Schema v...
    Read More

    Tags 


    Restful Authentication

    21 Mar 2008

    Restful Authentication提供了基于Restful形式的身份认证功能,包括email激活,登陆跳转等等功能。

    1. 创建工程:

    $rails test_restful_authentication
    $cd test_restful_authentication

    2. 安装插件:

    $script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication

    3. 生成测试模型和数据表:

    $script/generate authenticated user sessions --include-activation
    $script/generate scaffold post title:string body:text
    $rake db:migrate

    4. 增加routes:

    #config/routes.rb
    map.activate '/activate/:activation_code', :controller => 'users',...
    Read More

    Tags 


    ultrasphinx

    09 Mar 2008

    ultrasphinx是基于sphinx的rails全文搜索插件。我们将在一个已有的博客系统上增加全文搜索来学习这个插件,

    1. 首先确保系统已经安装以下软件: * MySQL 5.0 * Sphinx 0.9.8-dev r1112 * Rails 2.0.2 并且需要安装chronic gem,rails应用使用的是mysql数据库

    2. 安装插件:

    $script/plugin install -x svn://rubyforge.org/var/svn/fauna/ultrasphinx/trunk
    $mkdir config/ultrasphinx
    $cp vendor/plugin/ultrasphinx/examples/default.base config/ultrasphinx/

    3. 标记需要索引的内容:

    #app/models/post.rb
    is_indexed :fields => [title, body]
    #app/models/comment.rb
    is_indexed :fields => [body]

    4. 多mo...

    Read More

    Tags 


    acts_as_taggable_on_steroids

    03 Mar 2008

    acts_as_taggable_on_steroids是基于DHH写的acts_as_taggable,能够为active record的模型增加tag的功能,根据tag查找模型对象,以及计算tag云。下面的示例中我们将为博客系统增加tag功能:

    1. 创建工程:

    $rails test_acts_as_taggable_on_steroids
    $cd test_acts_as_taggable_on_steroids

    2. 安装插件:

    $script/plugin install http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids

    3. 生成post模型、tag和tagging模型:

    $script/generate scaffold post title:string body:text
    $script/generate acts_as_taggable_migration

    4. 为post模型增加tag功能,并添加测试数据:

    #ap...
    Read More

    Tags 


    will_paginate

    01 Mar 2008

    will_paginate为Rails提供了非常方便的分页浏览功能。我们将通过一个小例子来展示:

    1. 创建工程:

    $rails test_will_paginate
    $cd test_will_paginate

    2. 安装插件:

    $script/plugin install svn://errtheblog.com/svn/plugins/will_paginate

    3. 生成post模型,并添加测试数据:

    $script/generate scaffold post title:string body:text
    #db/migrate/001_create_posts.rb
    (1..50).each do |num|
      Post.create(:title => "title#{num}", :body => "body#{num}")
    end

    4. 生成数据表:

    $rake db:migrate

    5. 定义模型默认一页显示的条目数:

    #app/models/post.rb
    def self.per_page
      10
    end

    6. 修改controller的index方法,使其支...

    Read More

    Tags 


    acts_as_rateable

    29 Feb 2008

    acts_as_rateable插件为ActiveRecord模型对象提供评分/评级的能力,我们的示例是在blog系统中添加简单的打分功能。

    1. 创建测试工程:

    $rails test_acts_as_rateable
    $cd test_acts_as_rateable

    2. 安装插件:

    $script/plugin install svn://rubyforge.org/var/svn/rateableplugin/trunk

    3. 生成blog模型,并添加测试数据:

    $script/generate scaffold blog name:string content:text
    #db/migrate/001_create_blogs.rb
    Blog.create(:name => "poorest", :content => "poorest")
    Blog.create(:name => "poorer", :content => "poorer")
    Blog.create(:name => "just so so", :content => "just so...
    Read More

    Tags 


    auto_complete

    27 Feb 2008

    atuo_complete插件提供输入提示功能,我们通过一个example来示范,用户在输入日志的tag时,有自动输入提供。

    1. 创建测试工程:
    $rails test_auto_complete
    $cd test_auto_complete
    1. 生成blog和tag模型:
    $script/generate scaffold blog title:string content:string
    $script/generate model tag name:string blog_id:integer
    1. 映射一对多关系:
    #app/models/blog.rb
    has_many :tags
    #app/models/tag.rb
    belongs_to :blog
    1. 添加测试数据:
    #db/migrate/001_create_blogs.rb
    Blog.create(:title = test, :content = test)
    #db/migrate/002_create_tags.rb
    blog = blog.find(:first)
    Tag...
    Read More

    Tags