我有一个名为Organizations的模型,其中包含其地址的字段。在模型中,我有声明before_save { self.address_line_1 = address_line_1.titleize }
,并且意识到这正在将PO Box的地址更改为Po Box。
另一个例子:我也有一个标准的用户模型,名字/姓氏。 Titleize会将一个人的名字从TJ改为Tj。或者,如果他们的姓氏是连字符,它将从史密斯 - 琼斯到史密斯琼斯。
使用PO框我会提前知道异常,但不会知道用户的名字。有没有办法允许这些例外,同时仍然具有核心titlsize功能?
答案 0 :(得分:1)
我建议尽量避免更改titlelize
的语义,以避免以后出现问题时,在同一应用程序的另一部分中,您应该按照它真正意图执行的操作做。由于您正在为titleize
寻找一些相当专业的功能,因此我创建了一个新的,类似的方法,您可以将其修补到String
类中,如上所述,称为, abook_titleize
(地址簿标题化):
class String
def abook_titleize
if allow_titleize(self)
titleize
else
# Check for other behaviors, such as if "self" is all consonants
# or if self is found in a predetermined list of acronyms,
# perhaps return self.upcase
self.upcase
end
end
private
def allow_titleize(s)
# Write some code here that determines if you want this string
# to be titleized and return true if so, otherwise false
end
end
或类似的东西。您可以根据需要将其简化或精心制作。如果你真的想改变titleize
行为本身(再次,我不建议),那么:
class String
:alias_method :old_titleize, :titleize
def titleize
if allow_titleize(self)
old_titleize
else
...