9

我正在使用 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 还有其他可用的内置方法吗?

4

2 回答 2

30

如果您使用i18n,您可以调用Model.model_name.human以获取本地化模型名称。

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

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

于 2012-12-11T15:42:46.747 回答
1

我认为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
于 2012-09-10T11:07:05.990 回答