2016-04-19 24 views
0

どのように私のクエリは、間違った解決:私はこのコードを持っている場合、更新列

@selected_ids = params[:authorization][:contract_number] 
@selected_ids.zip(params[:authorization][:contract_number]).each do |id, value| 
     Authorization.where(contract_number: params[:authorization][:contract_number]).update_all(value_solve: params[:authorization][:value_solve], situation: 2) 
     end 

はエラーが、私のコンソールではなかったのが

Processing by RefinancingsController#new as HTML 
    Parameters: {"utf8"=>"✓", "search_employee_by_cpf"=>"11111111111", "authorization"=>{"value_solve"=>["", "4345", "454", ""], "contract_number"=>["22", "33"]}, "commit"=>"Reserve"} 
    SQL (344.2ms) UPDATE "authorizations" SET "value_solve" = '--- 
- '''' 
- ''4345'' 
- ''454'' 
- '''' 
', "situation" = 2 WHERE "authorizations"."contract_number" IN ('22', '33') 
    SQL (133.1ms) UPDATE "authorizations" SET "value_solve" = '--- 
- '''' 
- ''4345'' 
- ''454'' 
- '''' 
', "situation" = 2 WHERE "authorizations"."contract_number" IN ('22', '33') 

そして、私のデータベースにクエリを生成し、値は、チェックされた各チェックボックスごとに複製されます。

この例では、列value_solve、認証ID 2

--- 
- '' 
- '4345' 
- '454' 
- '' 

列value_solve、3

--- 
- '' 
- '4345' 
- '454' 
- '' 

は、ちょうどこれは、私は解決のためにこれを行う方法と、DB上で正しく保存してください許可IDですか?正しい引数を持つ2回の更新を発射する必要があり

auth_params = params[:authorization] 
auth_params[:contract_number].zip(auth_params[:value_solve]).each do |contract_number, value_solve| 
    Authorization.where(contract_number: contract_number).update_all(value_solve: value_solve, situation: 2) 
end 

:あなたは2回の更新ではなく、配列値を持つ1つの更新プログラムにそれを分割する必要があり

SQL (344.2ms) UPDATE "authorizations" SET "value_solve" = "4345", "situation" = 2 WHERE "authorizations"."contract_number" IN '22' 
     SQL (133.1ms) UPDATE "authorizations" SET "value_solve" = "454", "situation" = 2 WHERE "authorizations"."contract_number" IN '33' 

答えて

0

答えはこれです:

 auth_params = params[:authorization] 
auth_params[:contract_number].zip(auth_params[:value_solve].reject(&:blank?)).each do |contract_number, value_solve| 
      Authorization.where(contract_number: contract_number).update_all(value_solve: value_solve, situation: 2) 
     end 

:D

0

: は、私はこれを必要とします。

+0

このエラーを持っている...働いてはいけない:属性は、Arrayことになってますが、文字列でした。 - "5745" In。queries –

+0

入力パラメータをクリーンアップする必要があるようです。これは完全な解決策ではないかもしれませんが、あなたが求めている2つの更新を行うべきです。 – tadman

+0

私は何をすべきか分かりません。私はそれを働かそうと多くの時間を費やした=( –

関連する問題