接收参数并保存在其他模型中并删除错误 'id'= 0 找不到授权

Receive params and save in other model and remove error Couldn't find Authorization with 'id'= 0

我有一个带有复选框和输入文本的视图。 提交后,我在输入时选中了一个复选框和数字值。但是有两个问题...参数错误并且不保存我的 table 上的值,这是我的代码:

refinancings_controller.rb

  def new
    if params[:authorization]
      @selected_ids = params[:authorization][:contract_ids]
      @authorizations = Authorization.where("contract_number in (?)", @selected_ids)
    end
    @employee = Employee.search_cpf(params[:search_employee_by_cpf])
    @refinancing = Refinancing.new
    params[:authorization][:contract_ids].each_with_index do |id, index|
      Authorization.find(id).update_column(value_solve: params[:authorization][:value_solve], situation: 2)
    end
  end

这是我的控制台:

  Parameters: {"utf8"=>"✓", "search_employee_by_cpf"=>"123456789", "authorization"=>{"contract_ids"=>["11"], "value_solve"=>["334545", "", ""]}, "commit"=>"Reserve"}
Completed 500 Internal Server Error in 18ms (ActiveRecord: 0.6ms)

错误是:

Couldn't find Authorization with 'id'= 0

我的看法是正确的。其他的东西。再融资 belongs_to :authorization and Authorizarion has_many :refinancings 当我检查时,复选框的 id 单击通过 ok 和 value_solve 也是,但情况没有改变,db

上没有任何保存

您应该只使用 each 而不是 each_with_index。您现在设置它的方式是将数组的索引传递给您的查找方法。数组的第一个索引始终为 0,这就是您收到该错误的原因。您可以这样设置:

params[:authorization][:contract_ids].each do |id|

使用此代码:

Authorization.where(id: params[:authorization][:contract_ids]).update_all(value_solve: [:authorization][:value_solve])

显示此错误:

TypeError in RefinancingsController#new
no implicit conversion of Symbol into Integer

答案是:

      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