我有以下型号:
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)
答案 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迁移