Рельсы: рейтинг вверх или вниз, часть II - PullRequest
0 голосов
/ 22 февраля 2012

Базовая суть : В настоящее время я пытаюсь создать счетчик рейтинга, который имеет функцию повышения или понижения.Я создаю отдельную модель для отображения счетчика рейтинга, и счетчик принадлежит посту.Я пытаюсь создать что-то похожее на Reddit или даже Stackoverflow.В настоящее время я застрял на том, что делать.Спасибо всем.

DB: таблица рейтинга : post_id, user_id, рейтинги

DB: таблица сообщений : рейтинги_count

Рейтинг модели

class Rating < ActiveRecord::Base
  attr_accessible :post_id, :user_id, :ratings
  has_many :post
  has_many :users

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

Пост-модель

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

  validates :user_id, presence: true
  validates :smiles, presence: true
end

Рейтинг контроллера

Nothing in it

Пост-контроллер

class PostsController < ApplicationController

  def rate
    @post = post.find(params[:id])
    if params[:ratings_count]
      @post.ratings_count=@post.ratings_count+1
    end
  end

  def unrate

    unsure

  end
end

Форма оценки

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

1 Ответ

0 голосов
/ 22 февраля 2012

Вы можете использовать что-то вроде этого: http://ar.rubyonrails.org/classes/ActiveRecord/Base.html#M000348

class PostsController < ApplicationController

  def rate
    Post.increment_counter(:ratings_count, params[:id]) if params[:ratings_count]
  end

  def unrate
    # You will obviously need to check for a ratings_down or something similar field in your form
    Post.decrement_counter(:ratings_count, params[:id]) if params[:ratings_count]
  end
end
...