SORU
14 Mayıs 2010, Cuma


Raylar 'insancıl' dizeleri için bir ters var mı?

Raylar olarak çalışan dizeleri humanize() bir yöntem izler (Raylar RDoc) ekler:

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

Diğer tarafa gitmek istiyorum. Ben "istiyorum" bir kullanıcı giriş 'de-insancıl' bir model öznitelik yazmak için: . oldukça

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

Raylar bunun için herhangi bir yardım da dahil mi?

Güncelleme

Bu arada, aşağıdaki/denetleyici/application_controller uygulaması ekledim.rb:

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

Daha iyi bir yere koymak için mi var?

Çözüm

Teşekkürler, fd, link için. Çözüm orada uygulanan tavsiye ettim. Benim config//enfeksiyonlar başlatıcılar.rb, sonunda şunları ekledi:

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

CEVAP
11 NİSAN 2011, PAZARTESİ


the_string.stratejisinin.alt çizgi, aynı sonucu verecektir

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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Michelle Phan

    Michelle Pha

    18 Temmuz 2006
  • MikeyMacintosh

    MikeyM

    28 Aralık 2009
  • Vagrant Records

    Vagrant Reco

    8 Mayıs 2006