Rails 3应计价模型 - 如何创建ajax评级?

时间:2011-02-17 19:55:44

标签: ruby-on-rails ajax ruby-on-rails-3

如何在此页http://watir.com/documentation/上创建一些简单的ajax评级?每个访问者都应该能够评分,我不需要设置权限。我想将评级存储在一列中。因此用户可以按评级排序。 请做一个详细的例子。我不是javascript专家。

我找到了一个从头开始创建评级的示例。但它授权用户。 有人可以给我一个指导,在没有Rater(用户)的情况下创建评级吗?它不仅应存储值,还应计算投票数。

http://eighty-b.tumblr.com/post/1569674815/creating-an-ajaxified-star-rating-system-in-rails-3

2 个答案:

答案 0 :(得分:4)

我最近为现有项目添加简单评级机制的做法如下:

我在现有表格中添加了两个字段(其中包含要评分的项目)。那些是:

rating_score => The current score
ratings => The number of ratings which led to the score

例如,如果五个用户对当前项目投了“5”,则rating_score将为25,评级为5.当前评级将计算为rating_score / ratings。< / p>

然后我在控制器中添加了一个新方法,用于评级,称为“速率”,看起来像是:

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框架。

评级的partial名为_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
</form>

在这个部分中,rating_stars()辅助方法为评级生成了某种类似星形的表示,但是你可以随心所欲地做到这一点。

通过在f​​orm_tag帮助器中设置“remote:true”,您的Rails安装应该通过已安装的Javascript框架自动传输请求。这个魔法是Rails最近发生的整个unobtrusive javascript事情的一部分,实际上非常酷。

希望这能让您了解如何在Rails中实现一个非常简单的评级系统,而无需任何IP锁定功能

答案 1 :(得分:0)

看起来Watir文档评级系统是通过polldaddy设置的。

对于这种特殊情况,它似乎包括polldaddy javascript,它用他们的星级小部件填充评级div容器。看起来有一个相应的javascript对象,您可以检查:

console.log( PDRTJS_101132_page_2.avg_rating ); //=> 4

如果你在页面上有很多这样的评级小部件,并且你能够制作一个与他们的div配对的javascript对象的集合,大概你可以根据这个平均评级属性对它们进行排序。