用acts_as_rateable兑现简单的打分功能
用acts_as_rateable实现简单的打分功能
acts_as_rateable插件为ActiveRecord模型对象提供评分/评级的功能,下面的示例是一个简单的打分功能。
1、安装插件
ruby script/plugin install svn://rubyforge.org/var/svn/rateableplugin/trunk
2、创建表
def self.up create_table :ratings do |t| t.integer :rating t.integer :rateable_id, :null => false t.string :rateable_type, :null => false end add_index :ratings, [:rateable_id, :rating] end def self.down drop_table :ratings end
3、为模型增加打分功能
class Entry < ActiveRecord::Base acts_as_rateable end
4、修改路由
map.resources :entries, :member => { :rating => :post }
5、增加打分表单
<% form_tag rating_entry_path(@entry) do %> 请评分 <% (1..5).each do |value| %> <%= radio_button_tag :rating, value, true %><%= value %> <% end %> <%= submit_tag '打分' %> <% end %>
6、打分方法
def rating Entry.find(params[:id]).rating = params[:rating] redirect_to entries_url end
7、显示打分结果
<%= h entry.rating %>
以上的示例只能为每个entry保留一个评分,如果希望能够多次评分,以获得平均分的话,可以在model中增加average参数:
class Entry < ActiveRecord::Base acts_as_rateable :average => true end
打分界面也可以像下面这样来写:
<%= stars(@entry, :filled_star => "X", :empty_star => "x") do |content,rating,filled| link_to content, :controller => "entries", :action => "rating", :id => @entry.id, :rating => rating end %>