更新Rails数据库中的所有记录

时间:2016-05-28 16:05:32

标签: ruby-on-rails

我正在创建一个应用程序,用户可以在未来的场景中下注,例如"谁将赢得美国偶像?"

用户下注(在代码中称为道具)。

然后,管理员通过编辑投注的答案来选择正确的答案。

我想要检查数据库以查看每个用户的答案是否与管理员刚刚提供的答案相匹配。

我正在尝试做这样的事情

  def update
    @user = User.find(session[:user_id])

    @prop = Prop.find(params[:id])
    @answer = Answer.find(params[:id])

    @prop.update(prop_params)

    User.all.map 
     { |user|
      #the code here is called once for each user
      # user is accessible by 'user' variable


      if @answer.choice == @prop.choice
        puts "hello"
        @user.score += 7
        @user.save
      else
        @user.score -= 7
        @user.save

      end
     }

  end

实现目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

它应该是这样的:

def update
  @user = User.find(session[:user_id])
  @prop = Prop.find(params[:id])
  @answer = Answer.find(params[:id])

  @prop.update(prop_params)
  score_change = @answer.choice == @prop.choice ? 7 : -7
  User.update_all("score = score + #{score_change}")
end

<强>解释

这将根据需要返回7或-7

score_change = @answer.choice == @prop.choice ? 7 : -7

然后我们只是在一个查询中更新所有用户,不需要遍历每个用户

User.update_all("score = score + #{score_change}")

在钩子下,将生成此sql:

UPDATE "users" SET score = score + 7

或者

UPDATE "users" SET score = score + -7