Методы голосования Ajax в Ruby on Rails - PullRequest
0 голосов
/ 17 марта 2011

Итак, я разработал ассоциации моделей и столбец кэша счетчика, как показано в первом ответе здесь: Вопрос об ассоциации моделей

Теперь я хочу знать, после создания двух кнопок,по одному для повышения и понижения, а также для отображения кэша счетчика для количества голосов: <%= pluralize video.video_votes.size, 'vote' %> как мне следует создать метод (ы) контроллера, чтобы счетчик голосов увеличивался на 1 или уменьшался на 1?Я почти уверен, что смогу разобраться в части AJAX, поэтому мне в первую очередь любопытно сделать это как обычный HTTP-запрос.(Конечно, я бы тоже не отказался от помощи с AJAX ...)

Ответы [ 2 ]

3 голосов
/ 17 марта 2011

Контроллер

class VideoVotes < ApplicationController
  ...
  def create
    @vote = VideoVote.new(params[:video_vote])
    @vote.user = current_user
    @vote.save
  end

  # OR if you want

  def create
    # you can use params[:video_id] instead of params[:video_vote][:video_id]
    # but you should specify it in your view
    @video = Video.find(params[:video_vote][:video_id])
    @vote = @video.video_votes.new
    @vote.user = current_user
    @vote.save
  end
  ..
end

Магия AJAX, /app/viwes/video_votes/create.js.erb
Я буду использовать для этого jQuery, поэтому посмотрите, как его установить

$("#votes").html("Votes: <%= @vote.video.video_votes.size %>")
# or with @video variable
$("#votes").html("Votes: <%= @video.video_votes.size %>")

Вид:

<%= @video.description or whatever %>
<p id='votes'>Votes: <%= @video.video_votes.size %></p>
<p><%= link_to "+1", video_votes_path('video_vote[video_id]' => @video.id), :method => :post, :remote => true %></p>

Вот и все. Здесь могут быть некоторые опечатки

1 голос
/ 17 марта 2011

Кэш счетчика увеличивается при создании объекта этого класса и уменьшается при уничтожении.

из ruby ​​на рельсах api

обновление

@video = Video.find(params[:id])
@video.increment!(:votes_count)
#or
@video.decrement!(:votes_count)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...