29th May, 2008

Ajax Rating: 简易打分插件

刚完成的一个小插件,比较粗糙,欢迎多提意见。

安装

$ cd vendor/plugins
$ git clone git://github.com/yzhang/ajax_rating.git

使用

在你要评分的model中添加acts_as_ratable,比如post:


class Post < ActiveRecord::Base
   :acts_as_ratable
end

这为post增加了如下方法:

  1. rating,当前post的平均得分
  2. rating_count,评分人数

在可以打分的Model中添加acts_as_rater,比如user:


class User < ActiveRecord::Base
   :acts_as_rater
end

这为User增加了如下方法:

  1. rating_on(ratable),返回这个用户为某个对象打的分(1-5)

然后在view中调用:

rating_tag(rater, ratable)

rater就是打分者,ratable则是被评分的对象,如果rater为nil,则用户只能看到分数,但不能打分。

如果需要自定义外观,可以修改rating.css和images下的star123.png,关于CSS的原理说明请参看(十分对不起原作者,找不到原始出处):http://www.viphot.com/InfoView/Article_285645.html

如果为了安全考虑,需要限制只有当前登录用户可以打分,可以通过定义RatingsController#current_rater实现:


class RatingsController < ActiveController::Base
   :before_filter :login_required
  def current_rater
    current_user
  end
end

这样客户端传递的rater参数将失去作用。

完整例子

1. 创建demo:

$ rails ratable_demo
$ cd ratable_demo

2. 安装RESTFul_Auth

$ git clone git://github.com/technoweenie/restful-authentication.git vendor/plugins/restful_authentication
$ ./script/generate authenticated user sessions

3. 安装Ajax Rating

$ cd vendor/plugins
$ git clone git://github.com/yzhang/ajax_rating.git
$ cd ../../
$ ./script/generate ratable

4. 创建打分对象

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

5. 修改user.rb


class User < ActiveRecord::Base
   :acts_as_rater
end

6. 修改post.rb


class Post < ActiveRecord::Base
  acts_as_ratable
end

7. 修改 app/views/layout/posts.html.erb,包含Prototype和rating.css:


<%= stylesheet_link_tag 'scaffold', 'rating' %>
<%= javascript_include_tag :defaults %>

8. 修改application.rb:


include AuthenticatedSystem

9. 修改app/views/posts/show.html.erb:


<% if logged_in? -%>
   <%= rating_tag current_user, @post %>
<% else -%>
   <%= rating_tag nil, @post %>
   <%= link_to 'login to rating this post', new_session_path %>
<% end -%>

启动server,打开浏览器到/posts,创建一个新的Post,应该就可以看到一个打分的标签了。

7-4.png

评论

呵呵,很不错plugin:)

你好,svn库的链接已经失效了…还请检查一下,或者放到github上去好了..

已经放到github上了: git://github.com/yzhang/ajax_rating.git

Hi yuanyi,

nice work, 我对这个插件很感兴趣,但是对ajax部分不太清楚,我在github上找不到这个插件了,请问能否给我email一份呢?谢谢

留条评论?

Your response:

Categories