更新模型时如何忽略所有空白表单字段?

时间:2015-11-12 15:09:41

标签: ruby-on-rails

我有以下型号:

class User < ActiveRecord::Base
  validates :password, presence: true, length: { in: 6..255 }
end

...和标准的控制器和视图。用户表单不显示当前密码。我想避免在模型上设置此空白密码。我只想在非空白时更新密码。

我试过了:

model_params = params.reject {|k, v| v == ""}
@model.update!(model_params)

但它没有用,不能跳过模型验证。

当我致电model.update! Rails报告时:

Validation failed:  Password can't be blank, Password is too short (minimum is 6 characters)

3 个答案:

答案 0 :(得分:3)

我采用两种方法中的任何一种(按顺序):

首先,将:if条件添加到验证中:

validates :password, 
    presence: true, 
    length: { in: 6..255 },
    if: lambda { new_record? || !password.blank? }

其次,仅在create上运行此验证

validates :password, 
    presence: true, 
    length: { in: 6..255 },
    on: create

HTH

答案 1 :(得分:0)

你可以添加!像这样拒绝,

model_params = params.reject! {|k, v| v == ""}
@model.update!(model_params)

答案 2 :(得分:-1)

尝试修改模型的迁移文件,以便您想留空的字段在数据库中不会出现问题,例如:

create_table(:users) do |t|

  t.string :email,              null: true, default: ""
  t.string :encrypted_password, null: true, default: ""
end

然后你应该

rake db:migrate

如果已创建表,请尝试运行change_column迁移