Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.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:按用户删除投票记录_Ruby On Rails_Ruby_Ajax_Vote - Fatal编程技术网

Ruby on rails RubyonRails:按用户删除投票记录

Ruby on rails RubyonRails:按用户删除投票记录,ruby-on-rails,ruby,ajax,vote,Ruby On Rails,Ruby,Ajax,Vote,我创建了一个基本的RubyonRails应用程序,用户可以在其中投票选择pin。他们可以使用ajax方法为pin投票 我现在想要的是让用户删除他们的投票 以下是我的实现: pins\u controller.rb: def upvote @pin = Pin.friendly.find(params[:id]) @pin.votes.create(user_id: current_user.id) respond_to do |format| format.h

我创建了一个基本的RubyonRails应用程序,用户可以在其中投票选择pin。他们可以使用ajax方法为pin投票

我现在想要的是让用户删除他们的投票

以下是我的实现:

pins\u controller.rb:

  def upvote
    @pin = Pin.friendly.find(params[:id])
    @pin.votes.create(user_id: current_user.id)
    respond_to do |format|
    format.html { redirect_to @pin }
    format.js
    end
  end
用户\u控制器.rb

  def upvote
    @pin = Pin.friendly.find(params[:id])
    @pin.votes.create(user_id: current_user.id)
    respond_to do |format|
    format.html { redirect_to @pin }
    format.js
    end
  end
has_many :votes, dependent: :destroy
投票.rb

class Vote < ActiveRecord::Base
    belongs_to :user
    belongs_to :pin, counter_cache: true
    validates_uniqueness_of :pin_id, scope: :user_id
end
在我看来,他们可以通过以下方式投票:

<% if @pin.votes.where(user_id: current_user.id).empty? %>
  <%= link_to upvote_pin_path(@pin), method: :put, remote: true do %>
    Vote for this pin
  <% end %>
<% else %>
<% end %>

投票支持这个别针

现在我想让用户删除投票记录,但我不确定如何设置,我尝试在我的控制器中创建downvote方法,但没有任何效果


有什么想法可以让我走上正轨吗?

更多信息会有所帮助。例如,我假设存在一些限制,例如每个投票必须与一个用户绑定,每个用户每个pin只有一个投票。然而,解决方案是这样的

在pins_controller.rb中

def downvote
   @pin = Pin.friendly.find(params[:id])
   Vote.where(:user_id => current_user.id, :pin_id => @pin.id).each { |v| v.delete }

   respond_to do |format|
     format.html { redirect_to @pin }
     format.js
   end
end
在你看来

 <% if @pin.votes.where(user_id: current_user.id) %>
   <%= link_to downvote_pin_path(@pin), method: :put, remote: true do %>
     DELETE your Vote for this Pin!
   <% end %>
 <% else %>
 <% end %>

更多信息会有所帮助。例如,我假设存在一些限制,例如每个投票必须与一个用户绑定,每个用户每个pin只有一个投票。然而,解决方案是这样的

在pins_controller.rb中

def downvote
   @pin = Pin.friendly.find(params[:id])
   Vote.where(:user_id => current_user.id, :pin_id => @pin.id).each { |v| v.delete }

   respond_to do |format|
     format.html { redirect_to @pin }
     format.js
   end
end
在你看来

 <% if @pin.votes.where(user_id: current_user.id) %>
   <%= link_to downvote_pin_path(@pin), method: :put, remote: true do %>
     DELETE your Vote for this Pin!
   <% end %>
 <% else %>
 <% end %>

“我试图在我的控制器中创建一个向下投票方法,但没有任何效果。”如果您包含您尝试过的代码,这会有所帮助,否则,您会要求人们进行随机猜测。“我试图在我的控制器中创建向下投票方法,但没有任何效果。”如果您包含您尝试过的代码,则会有所帮助,否则,你要求人们随机猜测。