Есть ли у рельсов противоположность «гуманизации» для струн? - PullRequest
65 голосов
/ 14 мая 2010

Rails добавляет метод humanize() для строк, который работает следующим образом (из Rails RDoc):

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

Я хочу пойти другим путем. У меня «симпатичный» ввод от пользователя, которого я хочу «де-гуманизировать» для записи в атрибут модели:

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

Имеет ли рельсы какую-либо помощь для этого?

Обновление

Тем временем я добавил следующее в app / controllers / application_controller.rb:

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

Есть ли лучшее место, чтобы поставить его?

Решение

Спасибо, fd , за ссылку . Я реализовал решение, рекомендованное там. В моем config / initializers / инфекций.rb я добавил следующее в конце:

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

Ответы [ 3 ]

142 голосов
/ 12 апреля 2011

string.parameterize.underscore даст вам тот же результат

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

или вы также можете использовать более краткий (спасибо @danielricecodes).

  • Рельсы <5 <code>Employee salary".parameterize("_") # => employee_salary
  • Рельсы> 5 Employee salary".parameterize(separator: "_") # => employee_salary
3 голосов
/ 14 мая 2010

Похоже, такого метода в Rail API нет. Однако я нашел этот пост в блоге, который предлагает (частичное) решение: http://rubyglasses.blogspot.com/2009/04/dehumanizing-rails.html

1 голос
/ 06 июля 2011

В http://as.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html у вас есть несколько методов, используемых для предварительного или отменного преобразования строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...