Я рекомендую создать опции like
и dislike
, взяв за основу функциональность классической модели голосования.
Таким образом, у вас есть Vote
в качестве таблицы соединения между User
и Votable Item
.
Значение «Голосование» может работать как «Голосование». + 1 = «Нравится», «Голосование». -1 - «Не нравится», «Голосование.
Ваш контроллер для вашего голосового элемента может выглядеть так:
def like
get_vote
@vote.value += 1 unless @vote.value == 1
@vote.save
respond_to do |format|
format.html
format.js
end
end
def dislike
get_vote
@vote.value -= 1 unless @vote.value == -1
@vote.save
respond_to do |format|
format.html
format.js
end
end
private
def get_vote
current_item = @item.detect{|r| r.id == params[:id].to_i}
@vote = current_item.votes.find_by_user_id(current_user.id)
unless @vote
@vote = Vote.create(:user_id => current_user.id, :value => 0)
current_item.votes << @vote
end
end
И для всеобщего сведения, этот вопрос не заслуживал того, чтобы его отвергли. Это полностью действует.