【问题标题】:Update fails because of validations由于验证,更新失败
【发布时间】:2018-01-31 05:47:10
【问题描述】:

如果我尝试从我的 Student 模型更新一个属性,它会因为验证而失败。

  def update
    @student = Student.find(params[:id])
    if params['student']
      if params['student']['freedays']
        weekday_nbs = params['student']['freedays']&.first&.split(',')
        params['student']['freedays'] = weekday_nbs.inject([]){|sum, last| sum << Student::FREE_DAYS[last.to_i]}
      end
      if params['student']['vehicles']
        params['student']['vehicles'] = params['student']['vehicles']&.split(',')
      end
      if params['student']['driving_licenses']
        params['student']['driving_licenses'] = params['student']['driving_licenses']&.split(',')
      end
    end
    @student.update(student_params)
    redirect_to student_path(@student)
  end

这是我尝试更新属性 (:beschikbaar) 时遇到的错误:

`ActiveRecord::RecordInvalid: Validation failed: First name can't be blank, Last name can't be blank, Age can't be blank, Photo can't be blank, Studie can't be blank, Description can't be blank, Phone number can't be blank from /home/yves/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/ac‌​tiverecord-5.0.1/lib‌​/active_record/valid‌​ations.rb:78:in`

有人知道如何解决这个问题吗?

谢谢!

【问题讨论】:

  • “有人知道如何解决这个问题吗?” - 嗯,提供必填字段或删除验证如何?
  • 请发布您的学生模型和日志!

标签: ruby-on-rails postgresql validation attributes sql-update


【解决方案1】:

update 方法将调用验证,如果对象未通过验证,将不保存。当您尝试更新特定属性时,我建议您改用update_attributeupdate_column

只是改变

@student.update(student_params)

@student.update_attribute(beschikbaar: params[:beschikbaar])

@student.update_column(beschikbaar: params[:beschikbaar])

【讨论】:

  • 我应该对所有属性分别执行此操作吗?
  • @crievino 这取决于您一次要更新多少个属性。如果您想更新更多属性,请使用update_columns
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 2018-05-01
  • 1970-01-01
相关资源
最近更新 更多