簡體   English   中英

如何在 Ruby on Rails 中獲取人類可讀的類名?

[英]How to get human readable class name in Ruby on Rails?

我正在使用 Ruby 1.9.3 和 Rails 3.0.9 構建應用程序

我有一個像下面這樣的課程。

module CDA
  class Document
    def humanize_class_name
      self.class.name.gsub("::","")
    end
  end
end

我想要像“CDADocument”這樣的類名。

我的 humanize_class_name 方法是實現此目的的正確方法嗎?

或者

Rails 還有其他可用的內置方法嗎?

如果您使用i18n ,您可以調用Model.model_name.human來獲取本地化模型名稱。

例如: Event.model_name.human返回我的本地化名稱。

文檔: http ://api.rubyonrails.org/classes/ActiveModel/Name.html#method-i-human

我認為Rails可能有類似的東西,但是由於您想要的形式很奇特,因此您必須自己設計方法。 你定義它的位置是錯誤的。 您必須為每個班級都這樣做。 相反,您應該在 Class 類中定義它。

class Class
    def humanize_class_name
      name.delete(":")
    end
end
some_instance.class.humanize_class_name #=> the string you want

或者

class Object
    def humanize_class_name
        self.class.name.delete(":")
    end
end
some_instance.humanize_class_name #=> the string you want

對此已經有一個公認的答案,但我想我會分享我所做的解決這個問題的方法,而無需使用任何 Rails 東西。 它在類名和所有內容中占::

def self.humanize_class_name
  self.inspect.scan(/[A-Z][a-z]+/).join(' ')
end

它的作用是獲取字符串化的類名( self.inspect ),然后.scan在該類名中創建與正則表達式匹配的任何字符串的數組,然后將其join成單個字符串,在每個單詞之間放置一個空格. 在這種情況下,正則表達式/[AZ][az]+/選擇單詞中由單個大寫字母后跟一個或多個小寫字母組成的所有字符串。

如果您的任何類名包含多個連續的大寫字母,則必須修改正則表達式,特別是如果連續的大寫字母可能屬於不同的單詞(例如,名為MyJSONParser的類應該人性化為“My JSON Parser”,而正則表達式上面會將其呈現為“我的解析器”,因為連續的大寫字母將被忽略)。

請注意,我編寫的方法也假定它是一個類方法。 實例方法如下所示:

def humanize_class_name
  self.class.inspect.scan(/[A-Z][a-z]+/).join(' ')
end

我希望這對某人有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM