Javascript Rails:允许用户销毁投票
因此,我有一个非常简单的投票系统,允许用户投票pin: app/views/pins/show.html.erb app/models/vote.rbJavascript 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方法中,调用模型中的新方法 当然,您可以在控制器中完成所有这些
我想要的是允许用户破坏他们的投票,如果他们愿意的话。我尝试了几种使用: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