我的 rails 应用程序中有一个支持系统,允许用户支持 Pin。但我想限制仅对 Pin 图进行一次投票的能力。
应用程序/控制器/pins_controller.rb
def upvote
@pin = Pin.find(params[:id])
@pin.votes.create
redirect_to(pins_path)
end
应用程序/模型/pin.rb
class Pin < ActiveRecord::Base
belongs_to :user
has_many :votes, dependent: :destroy
has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" }
has_attached_file :logo, :styles => { :medium => "300x300>", :thumb => "100x100>" }
end
应用程序/配置/路由.rb
resources :pins do
member do
post 'upvote'
end
end
我不确定如何实现这一点,因为我试图实现一个只允许用户投票一次的系统,这不是我想要的,我希望他们只能投票一次“PIN”。我知道acts_as_votable gem 提供了这个功能,但由于我没有使用它,我想知道是否有办法在我自己的代码上实现它。
有任何想法吗?
更新:此方法仅允许每个引脚投一票。请参阅@Ege 解决方案
让它与这个一起工作:
def upvote
@pin = Pin.find(params[:id])
if @pin.votes.count == 0
@pin.votes.create
redirect_to(pins_path)
else flash[:notice] = "You have already upvote this!"
redirect_to(pins_path)
end
end