gpt4 book ai didi

ruby-on-rails - 如何实现每个用户每个评论一票?

转载 作者:行者123 更新时间:2023-12-03 00:41:47 27 4
gpt4 key购买 nike

我目前有一个评论 Controller ,它具有 vote_up 和 vote_down 方法,这就是我的 vote_up 目前的工作原理。

我的评论模型有描述和计数字段。

  def vote_up
@comment = Comment.find(params[:comment_id])
@comment.count += 1
if @comment.save
flash[:notice] = "Thank you for voting"
respond_to do |format|
format.html { redirect_to show_question_path(@comment.question) }
format.js
end
else
flash[:notice] = "Error Voting Please Try Again"
redirect_to show_question_path(@comment.question)
end
end

这允许多次投票赞成和反对。我将如何设计它,以便用户每个评论只能投票一次,但以某种方式跟踪他们是否投了赞成票或反对票,这样他们就可以根据需要更改投票。

最佳答案

你可以做这样的事情。它禁止相同的投票,但允许将投票更改为相反的投票(这是一个赞成/反对系统)。

def vote(value, user) # this goes to your model

#find vote for this instance by the given user OR create a new one
vote = votes.where(:user_id => user).first || votes.build(:user_id => user)

if value == :for
vote_value = 1
elsif value == :against
vote_value = -1
end

if vote.value != vote_value
vote.value = vote_value
vote.save
end
end

迁移:

def self.up
create_table :votes do |t|
t.references :comment, :null => false
t.references :user, :null => false
t.integer :value, :null => false
end
add_index :votes, :post_id
add_index :votes, :user_id
add_index :votes, [:post_id, :user_id], :unique => true
end

或者,您可以使用名为 thumbs_up 或任何其他的 gem。

关于ruby-on-rails - 如何实现每个用户每个评论一票?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6776787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com