before_save,剥离一个字符串

Posted

技术标签:

【中文标题】before_save,剥离一个字符串【英文标题】:before_save, strip a string 【发布时间】:2014-01-28 09:09:23 【问题描述】:

我正在尝试在我的用户模型中 strip 变量 Username 的空格。

我正在使用

before_save do
  self.username.strip!
end

但它似乎不起作用,我错过了什么吗?

【问题讨论】:

你错过了作业self.username = self.username.strip! @Hitham S. AlQadheeb,不需要分配。使用strip! 已经这样做了。 哦,谢谢指正。 【参考方案1】:

你宁愿更新 setter 而不是用回调污染你的模型:

def username=(value)
  self[:username] = value.to_s.strip
end

顺便说一句,我更喜欢squish

【讨论】:

感谢您的回答,它工作得很好。你能解释一下为什么你更喜欢squish而不是strip吗? squish 删除所有愚蠢的空白,str​​ip 只删除前导和尾随 听起来很酷,所以我替换 value.to_s.strip => value.to_s.squish 对吧? @daniel 这是为了避免nil 的可能性 如果是 ActiveRecord,请使用super(value.to_s.strip) 而不是self[:attr] = value.to_s.strip【参考方案2】:

如果您想删除仅前导和尾随空格,您可以使用 .strip!

但正如你所说:

我正在尝试删除我的变量 Username 的空格 用户模型。

我认为实际上你想删除所有空格以下应该这样做:

.gsub(/\s+/, "")

编辑:

哦对了,你也可以使用Rail的内置方法squish()

感谢 apneadiving 的提醒

【讨论】:

以上是关于before_save,剥离一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

剥离非ascii字符的多行字符串

innerHTML 剥离动态添加的字符

从字符串中剥离 IPv6 和端口号

将 JavaScript 通过 websockets 发送的最后一个字符剥离到 Python

在 oracle 中剥离字符串

将链接从 selenium 迭代到 bs4 并打印剥离的字符串