У меня есть система голосов в моем приложении rails, которая позволяет пользователям голосовать за пин. Но я хотел бы ограничить возможность голосовать за пин только один раз.
приложение/контроллеры/pins_controller.rb
def upvote
@pin = Pin.find(params[:id])
@pin.votes.create
redirect_to(pins_path)
end
приложение/models/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
app/config/routes.rb
resources :pins do
member do
post 'upvote'
end
end
Я не уверен, как это реализовать, поскольку я пытался внедрить систему, позволяющую пользователям голосовать только один раз, это не то, чего я хочу, я хочу, чтобы они могли голосовать за «ПИН-код» только один раз. Я знаю, что гем acts_as_votable предоставляет эту функцию, но, поскольку я ее не использую, я хотел знать, есть способ реализовать это в моем собственном коде.
Любые идеи?
ОБНОВЛЕНИЕ: этот метод допускает только один голос на пин. см. решение @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