Ruby on rails Rails活动记录-如何进行调用方法而不是抛出错误的验证
活动记录验证失败时会抛出错误。我在模特身上看到的是Ruby on rails Rails活动记录-如何进行调用方法而不是抛出错误的验证,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,活动记录验证失败时会抛出错误。我在模特身上看到的是 validate_format_of :field_which_cannot_have_spaces, :with => /^[^\s]+$/, :message => "Some error message" 相反,我想要的是替换字符串,用空格代替下划线(snake_大小写) 对我来说,使用验证的优点是,它在每次更改字段时都会运行,并且我不需要在创建和更新控制器方法中重复替换 如果用户对表单进行黑客攻击,前端javascript
validate_format_of :field_which_cannot_have_spaces, :with => /^[^\s]+$/, :message => "Some error message"
相反,我想要的是替换字符串,用空格代替下划线(snake_大小写)
对我来说,使用验证的优点是,它在每次更改字段时都会运行,并且我不需要在创建和更新控制器方法中重复替换
如果用户对表单进行黑客攻击,前端javascript解决方案将毫无帮助。。。需要一个rails解决方案 同事刚刚告诉我在模型中执行以下操作:
def field_which_cannot_have_spaces=(input_from_form)
super(input_from_form.gsub("\s","_"))
end
这将在设置时更改该值
“验证用于通知客户端存在问题,并且不应执行除抛出错误以外的其他操作。”
希望这对其他人有所帮助…听起来你想要的是验证,而不是验证。这可以在每次修改对象时运行
因此,要在保存对象之前从字段中删除空格,可以执行以下操作:
before_save :remove_spaces_from_x
def remove_spaces_from_x
self.field_which_cannot_have_spaces.gsub!("\s","_")
end
还请注意,验证失败时并不总是引发错误。如果您使用保存代码>或创建
则会引发错误,但如果使用等效的保存
或创建
则不会引发错误,返回false
,并用验证失败的详细信息填充对象的错误