2016-05-28 10 views
0

"Who Are Win American Idol?"のような将来のシナリオでベットするアプリを作っています。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 

ような何かをしようとしていますか?

+0

をあなたは 'update_all' – Ilya

答えて

1

それは単にこのようにする必要があります:これは、-7または7を返しますあなたは

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

をしたいとその後、我々はただのすべてのユーザーを更新

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 

説明単一のクエリで、各ユーザーに対して繰り返し処理する必要はありません。

フックの下

、このSQLが生成されます。

UPDATE "users" SET score = score + 7 

それとも

UPDATE "users" SET score = score + -7 
+0

うわー、あなたがそれを釘付け探しのようにそれはそう。あなたのコードを少し説明してください。それがどのように動作するか、特に最後の2行について説明できれば、本当に役に立ちます! – CodeYogi

+0

説明を更新するだけです –

+0

ありがとうございます! – CodeYogi

関連する問題