Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails中的Ajax投票方法_Ruby On Rails_Ruby_Ajax_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails RubyonRails中的Ajax投票方法

Ruby on rails RubyonRails中的Ajax投票方法,ruby-on-rails,ruby,ajax,ruby-on-rails-3,Ruby On Rails,Ruby,Ajax,Ruby On Rails 3,因此,我开发了模型关联和计数器缓存列,如第一个答案所示: 现在我想知道,在创建两个按钮(一个用于upvote和downvote)以及显示投票数的计数器缓存之后:我应该如何创建控制器方法,以便投票计数增加1或减少1?我很确定我自己可以理解AJAX部分,所以我首先对作为一个普通HTTP请求来完成这项工作感到好奇。(当然,我也不介意帮助使用AJAX…) 计数器缓存在 将创建此类的对象并 当它被破坏时会减少 从 更新 计数器缓存在 将创建此类的对象并 当它被破坏时会减少 从 更新 控制器 class V

因此,我开发了模型关联和计数器缓存列,如第一个答案所示:

现在我想知道,在创建两个按钮(一个用于upvote和downvote)以及显示投票数的计数器缓存之后:
我应该如何创建控制器方法,以便投票计数增加1或减少1?我很确定我自己可以理解AJAX部分,所以我首先对作为一个普通HTTP请求来完成这项工作感到好奇。(当然,我也不介意帮助使用AJAX…)

计数器缓存在 将创建此类的对象并 当它被破坏时会减少

更新 计数器缓存在 将创建此类的对象并 当它被破坏时会减少

更新 控制器

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
类视频投票
AjaxMagick,/app/viwes/video\u vots/create.js.erb
我将使用jQuery来实现这一点,所以请查看如何安装它

$("#votes").html("Votes: <%= @vote.video.video_votes.size %>")
# or with @video variable
$("#votes").html("Votes: <%= @video.video_votes.size %>")
$(“#投票”).html(“投票:)
#或者使用@video变量
$(“#投票数”).html(“投票数:)
视图:


投票:

@video.id),:method=>:post,:remote=>true%>

就这些。这里可能有一些错误类型

控制器

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
类视频投票
AjaxMagick,/app/viwes/video\u vots/create.js.erb
我将使用jQuery来实现这一点,所以请查看如何安装它

$("#votes").html("Votes: <%= @vote.video.video_votes.size %>")
# or with @video variable
$("#votes").html("Votes: <%= @video.video_votes.size %>")
$(“#投票”).html(“投票:)
#或者使用@video变量
$(“#投票数”).html(“投票数:)
视图:


投票:

@video.id),:method=>:post,:remote=>true%>



就这些。这里可能有一些输入错误

一个视频有很多视频投票这一事实怎么办?它必须是
@vote=@video.video\u vote.new(params[:video\u vote]
?还是在create.js.erb中处理?这是一样的。您可以按
@video=video.find params[:video\u vote][:video\u id]执行操作;@vote=@video.video\u votes.new;
作为我展示的一种方式,假设我也想有一个downvote按钮和方法。我该怎么做呢?所以你不需要计数器缓存:)一个视频有很多视频投票这一事实呢?它必须是
@vote=@video.video\u vote.new(params[:video\u vote]
?还是在create.js.erb中处理?这是一样的。您可以按
@video=video.find params[:video\u vote][:video\u id]执行操作;@vote=@video.video\u votes.new;
作为我展示的一种方式,假设我也想有一个downvote按钮和方法。我该怎么做?所以计数器缓存不是你需要的:)计数器缓存通常用于计算现有子对象。但您可以始终使用递减计数器方法。这更像是一种黑客行为,因为@video.video\u voces.count与@video.video\u voces.size不同。不太好,我更新了答案。我同意他不需要计数器缓存。如果我不使用计数器缓存,那么我不需要像
.count
那样做,或者做一些会影响性能的事情吗?当然,使用count会降低应用程序的性能。我要说的是不要使用计数器缓存魔法。使用我上面发布的方法增加或减少您想要的列。您可以随时更新列。计数器缓存通常用于计算现有子对象。但您可以始终使用递减计数器方法。这更像是一种黑客行为,因为@video.video\u voces.count与@video.video\u voces.size不同。不太好,我更新了答案。我同意他不需要计数器缓存。如果我不使用计数器缓存,那么我不需要像
.count
那样做,或者做一些会影响性能的事情吗?当然,使用count会降低应用程序的性能。我要说的是不要使用计数器缓存魔法。使用我上面发布的方法增加或减少您想要的列。您可以随时更新列。实际上向下投票不适合
计数器\u缓存
使用实际向下投票不适合
计数器\u缓存
使用