0

我正在创建一个类似于 reddit 的简单的赞成/反对票系统,用户可以在其中赞成/反对某些内容,并在需要时改变主意。

我有一个页面对我的控制器的“创建”操作进行 AJAX 调用。控制器创建记录并返回正确的 js.erb 没有问题。但是,我想看看是否存在现有帖子,如果存在,我想销毁它。我的控制器如下所示:

def create
    @vote = GameVote.new
    @vote.game_id = params[:game_id]
    @vote.vote = params[:vote]
    @vote.user_id = session[:user_id]

    existing_vote = GameVote.where(whatever)

 respond_to do |format|
   if @vote.save
    format.js
   end
  end
end

它似乎只是忽略了中间查询,防止我在尝试保存新条目之前将其销毁(如果它存在)。有任何想法吗?

4

2 回答 2

3

更新现有的 GameVote(如果存在)似乎更自然,而不是对 delete+create。

为此,只需更换:

@vote = GameVote.new
@vote.game_id = params[:game_id]
@vote.vote = params[:vote]
@vote.user_id = session[:user_id]

existing_vote = GameVote.where(whatever)

和:

@vote = GameVote.where(game_id: params[:game_id], user_id: session[:user_id]).first_or_initialize
@vote.vote = params[:vote]
于 2012-04-10T06:11:35.467 回答
1

尝试 :

@vote = GameVote.find_or_create_by_game_id_and_user_id(params[:game_id], session[:user_id])
OR
@vote = GameVote.find_or_create(:game_id => params[:game_id], :user_id => session[:user_id])

@vote.vote = params[:vote]
于 2012-04-10T06:24:01.790 回答