Ruby on Rails中的Ajax / Increment Counter投票方法

时间:2012-02-22 06:51:55

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

我不确定我做错了什么,非常困惑。我正在努力建立一个像旧的Digg.com评级柜台一样的评级柜台。任何人都可以看看我的代码并帮助我吗?

需要注意的是,这里是单独的数据库表/模型:Rate, Post, User

评分: user_id integer, post_id integer and ratings_count integer default => 0

发布: ratings_count integer default => 0

这就是我目前正在使用的,我为此评级系统提供的所有代码,如果没有显示,那么我就没有它,因此失踪了,如果有人可以帮助指出什么,我会很高兴不见了。谢谢。

评分控制器

class RateController < ApplicationController
  def create
    @post.increment_counter(:ratings_count, params[:id]) if params[:ratings_count]
    respond_to do |format|
      format.html { redirect_to @user }
      format.js
    end
  end

  def increment_counter(counter_name, id)
    update_counters(:post, :ratings_count => 1)
  end
end

评估模型

class Rate < ActiveRecord::Base
  attr_accessible :post_id, :user_id, :ratings_count
  has_many :posts
  has_many :users

  validates :post_id, presence: true
  validates :user_id, presence: true

end

评分表格

<%=form_for @rate do |f|%>
<%= f.hidden_field :ratings_count %>
<%=f.submit "Rate"%>
<%end%>

Micropost模型

class Micropost < ActiveRecord::Base
  attr_accessible :ratings_count
  belongs_to :user
  has_many :ratings

  validates :ratings, presence: true
end

create.js.erb for rate

$("#rates").html("Rates: <%= @micropost.ratings_count.count %>")

1 个答案:

答案 0 :(得分:2)

查看 thumbs_up gem。 有了这个宝石,你只需要将它包含在你的模型中:

  • acts_as_votable

并向控制器添加一些逻辑