Ruby on Rails - 标题化异常

时间:2014-04-18 19:22:04

标签: ruby-on-rails

我有一个名为Organizations的模型,其中包含其地址的字段。在模型中,我有声明before_save { self.address_line_1 = address_line_1.titleize },并且意识到这正在将PO Box的地址更改为Po Box。

另一个例子:我也有一个标准的用户模型,名字/姓氏。 Titleize会将一个人的名字从TJ改为Tj。或者,如果他们的姓氏是连字符,它将从史密斯 - 琼斯到史密斯琼斯。

使用PO框我会提前知道异常,但不会知道用户的名字。有没有办法允许这些例外,同时仍然具有核心titlsize功能?

1 个答案:

答案 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
    ...