【问题标题】:Rails: Allow user to destroy votesRails:允许用户销毁选票
【发布时间】:2014-12-14 20:41:11
【问题描述】:

所以我有一个非常简单的投票系统,允许用户投票:

app/views/pins/show.html.erb

<%= link_to upvote_pin_path(@pin), method: :put, remote: true do %>
Upvote
<% end %>

app/controller/pins_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

app/models/vote.rb

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

我想要的是允许用户在他们愿意的情况下销毁他们的选票。我使用 :delete 和 destroy 方法尝试了几件事,但没有任何效果。有什么想法可以让我走上正轨吗? :-)

【问题讨论】:

    标签: javascript ruby-on-rails model controller destroy


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,但我不知道该怎么做,你能用一点代码突出显示这一点,让我走上正轨吗?
    • gist.github.com/mwiley/a54abe86819c0b825532 这应该能让你大部分时间到达那里,但我还没有尝试过这段代码。您可能需要模型中的另一种方法来检查是否存在投票,以便您可以相应地更新视图。模型中的这个方法已经做到了,所以你需要做的就是把这部分移到它自己的方法中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多