Rails 3 rateable模型 – 如何创建ajax评级?
如何在此页面上创建一些简单的ajax评级http://watir.com/documentation/ ? 每个访问者都应该能够评分,我不需要设置权限。 我想将评级存储在一列中。 因此用户可以按评级排序。 请做一个详细的例子。 我不是一个JavaScript专家。
我找到了一个从头开始创建评级的示例。 但它授权用户。 有人可以向我展示如何在没有Rater(用户)的情况下创建评级吗? 它不仅应存储值,还应计算投票数。
http://eighty-b.tumblr.com/post/1569674815/creating-an-ajaxified-star-rating-system-in-rails-3
我最近为现有项目添加简单评级机制的做法如下:
我在现有表中添加了两个字段(其中包含要评级的项目)。 那些是:
rating_score => The current score ratings => The number of ratings which led to the score
例如,如果五个用户对当前项目投了“5”,则rating_score
将为25,评级为5.当前评级将计算为rating_score / ratings
。
然后我向控制器添加了一个新的方法来评估被称为“速率”的项目,它看起来像:
def rate @item = Item.find(params[:id]) @container = "item"+@item.id.to_s @item.rating_score += params[:rating].to_i @item.ratings += 1 @item.save respond_to do |format| format.js end end
我对该方法的看法,称为rate.js.erb
,看起来像
$('#<%= @container %>').html('<%= escape_javascript(render(partial: 'rating', locals: { item: @item })) %>');
此代码仅在您安装了jQuery时才有效,但它应该可以轻松转换为Prototype或您可能正在使用的任何JS框架。
评级的部分名为_rating.html.erb
,如下所示:
<%= form_tag url_for(controller: 'items', action: 'rate', id: item.id), remote: true %> <%= rating_stars(item.rating_score, item.ratings) %> <%= item.ratings %> Votes
在这部分中, rating_stars()
辅助方法为评级生成了某种类似星形的表示,但是您可以随意执行此操作。
通过在form_tag帮助器中设置“remote:true”,您的Rails安装应该通过已安装的Javascript框架自动传输请求。 这个魔法是最近在Rails中发生的整个不引人注目的javascript事情的一部分,实际上非常酷。
希望这能让您了解如何实现一个非常简单的评级系统,在Rails中没有任何IP锁定function 。
看起来Watir文档评级系统是通过polldaddy建立的 。
对于这种特殊情况,它似乎包括polldaddy javascript,它用他们的星级小部件填充评级div容器。 看起来有一个相应的javascript对象,您可以检查:
console.log( PDRTJS_101132_page_2.avg_rating ); //=> 4
如果你在页面上有很多这样的评级小部件,并且你能够创建一个与他们的div配对的javascript对象的集合,大概你可以根据这个平均评级属性对它们进行排序。