Rails ajoute un humanize()
méthode pour les chaînes qui fonctionne de la manière suivante (dans le cas des Rails RDoc):
"employee_salary".humanize # => "Employee salary"
"author_id".humanize # => "Author"
Je veux aller dans l'autre sens. J'ai "assez" d'entrée d'un utilisateur que je veux à "déshumaniser" pour l'écriture d'un modèle de l'attribut:
"Employee salary" # => employee_salary
"Some Title: Sub-title" # => some_title_sub_title
Rails inclure toute l'aide pour cela?
Mise à jour
En attendant, j'ai ajouté ce qui suit à app/controllers/application_controller.rb:
class String
def dehumanize
self.downcase.squish.gsub( /\s/, '_' )
end
end
Est-il un meilleur endroit pour le mettre?
Solution
Merci, fd, pour le lien. J'ai mis en place la solution recommandée. Dans ma config/initializers/infections.rb, j'ai ajouté la ligne suivante à la fin:
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