0

Active Record 验证失败时会抛出错误。我在模型中拥有的是

validate_format_of :field_which_cannot_have_spaces, :with => /^[^\s]+$/, :message => "Some error message"

我想要的是用字符串替换来替换下划线(snake_case)的空格。

对我来说使用验证的好处是,每次更改字段时都会运行,除非save(validate: false)我不需要在创建和更新控制器方法中重复替换。

如果用户破解表单,前端 javascript 解决方案将无济于事......需要一个 rails 解决方案!

4

2 回答 2

1

听起来您想要回调而不是验证。每次修改对象时都可以运行。

因此,要在保存对象之前从字段中删除空格,您可以执行以下操作:

before_save :remove_spaces_from_x

def remove_spaces_from_x
  self.field_which_cannot_have_spaces.gsub!("\s","_")
end

另请注意,验证在失败时并不总是引发错误。如果您使用save!orcreate!则引发错误,但如果您使用等效项save或未create引发错误,false则返回并errors填充验证失败的详细信息。

于 2013-08-29T10:36:13.620 回答
0

同事刚刚告诉我在模型中执行以下操作:

def field_which_cannot_have_spaces=(input_from_form)
  super(input_from_form.gsub("\s","_"))
end

这将更改设置的值。

“验证是为了通知客户有问题,除了抛出错误之外不应该做其他事情。”

希望这对其他人有帮助...

于 2013-08-29T08:54:27.960 回答