【问题标题】:How resolve my query wrong when update columns更新列时如何解决我的查询错误
【发布时间】:2016-04-19 19:04:48
【问题描述】:

我有这个代码:

@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,授权 id 3

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

请,就这个,我该如何解决这个问题并正确保存在数据库中? 我需要这个:

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'

【问题讨论】:

    标签: sql ruby-on-rails ruby ruby-on-rails-4 sql-update


    【解决方案1】:

    你需要把它分成两个更新,而不是一个带有数组值的更新:

    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
    

    这应该会使用正确的参数触发两次更新。

    【讨论】:

    • 不工作...有这个错误:属性应该是一个数组,但它是一个字符串。 ——“5745”。在.where查询
    • 看来您可能需要清理输入参数。这可能不是一个完整的解决方案,但它应该可以完成您要求的两个更新。
    • 我承认我不知道该怎么做,伙计。我花了很多时间来尝试它=(
    【解决方案2】:

    答案是这样的:

          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

    【讨论】:

      猜你喜欢
      • 2015-06-27
      • 1970-01-01
      • 2019-08-27
      • 2020-08-18
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 2019-08-17
      相关资源
      最近更新 更多