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
,并用验证失败的详细信息填充对象的
错误