Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.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
Javascript Rails:允许用户销毁投票_Javascript_Ruby On Rails_Model_Controller_Destroy - Fatal编程技术网

Javascript Rails:允许用户销毁投票

Javascript Rails:允许用户销毁投票,javascript,ruby-on-rails,model,controller,destroy,Javascript,Ruby On Rails,Model,Controller,Destroy,因此,我有一个非常简单的投票系统,允许用户投票pin: app/views/pins/show.html.erb app/models/vote.rb 我想要的是允许用户破坏他们的投票,如果他们愿意的话。我尝试了几种使用:delete和destroy方法的方法,但没有任何效果。有什么办法让我走上正轨吗- 我会在模型中创建一个方法,检查给定用户的投票是否存在,如果存在,则将其删除,否则创建一个。然后在您的控制器中,在您创建的upvote方法中,调用模型中的新方法 当然,您可以在控制器中完成所有这些

因此,我有一个非常简单的投票系统,允许用户投票pin:

app/views/pins/show.html.erb

app/models/vote.rb


我想要的是允许用户破坏他们的投票,如果他们愿意的话。我尝试了几种使用:delete和destroy方法的方法,但没有任何效果。有什么办法让我走上正轨吗-

我会在模型中创建一个方法,检查给定用户的投票是否存在,如果存在,则将其删除,否则创建一个。然后在您的控制器中,在您创建的upvote方法中,调用模型中的新方法


当然,您可以在控制器中完成所有这些操作,但最好不要这样做。

谢谢,但我不知道如何做到这一点,您能用一点代码强调一下这一点,让我走上正轨吗?这应该可以让你达到目标,但我还没有尝试过这个代码。您可能需要在模型中使用另一种方法来检查投票是否存在,以便相应地更新视图。模型中的这个方法已经做到了这一点,所以您所需要做的就是将该部分移动到它自己的方法中。
<%= link_to upvote_pin_path(@pin), method: :put, remote: true do %>
Upvote
<% end %>
 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
class Vote < ActiveRecord::Base
    belongs_to :user
    belongs_to :pin, counter_cache: true
    validates_uniqueness_of :pin_id, scope: :user_id
end
  resources :pins do 
    resources :comments
    member do
    put 'upvote'
  end 
  end