68 votes

Les rails ont-ils un opposé à «humaniser» pour les chaînes?

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

146voto

giladbu Points 1166

the_string.parameterize.underscore vous donnera le même résultat

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

3voto

fd. Points 6835

Il ne semble pas exister de méthode de ce type dans l'API ferroviaire. Cependant, j'ai trouvé ce billet de blog qui offre une solution (partielle): http://rubyglasses.blogspot.com/2009/04/dehumanizing-rails.html

2voto

fuzzyalej Points 3163

Dans http://as.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html, vous avez quelques méthodes utilisées pour magnifier et déprécier des chaînes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X