Hat Rails das Gegenteil von 'humanize' für Strings?

Schienen fügt eine humanize() - Methode für strings, die wie folgt funktioniert (von den Schienen RDoc):

"employee_salary".humanize # => "Employee salary"
"author_id".humanize       # => "Author"

Ich möchte den anderen Weg gehen. Ich habe "ziemlich" Eingabe von einem Benutzer, ich will 'de-humanisieren" für das schreiben zu einem Modell, das Attribut:

"Employee salary"       # => employee_salary
"Some Title: Sub-title" # => some_title_sub_title

Tut rails gehören jede Hilfe für diese?

Update

In der Zwischenzeit habe ich noch folgende app/controllers/application_controller.rb:

class String
  def dehumanize
    self.downcase.squish.gsub( /\s/, '_' )
  end
end

Gibt es einen besseren Ort, um es?

Lösung

Dank, fdfür die link. Ich habe die Lösung implementiert empfohlen es. In meiner config/Initialisierungen/Infektionen.rb, ich habe Folgendes am Ende:

module ActiveSupport::Inflector
  # does the opposite of humanize ... mostly.
  # Basically does a space-substituting .underscore
  def dehumanize(the_string)
    result = the_string.to_s.dup
    result.downcase.gsub(/+/,'_')
  end
end

class String
  def dehumanize
    ActiveSupport::Inflector.dehumanize(self)
  end
end

InformationsquelleAutor der Frage irkenInvader | 2010-05-14

Schreibe einen Kommentar