web-dev-qa-db-ja.com

ActiveRecordモデルのクラス名をどのように変換できますか?

インスタンスを持っているときにActiveRecordモデルクラスの翻訳された名前を取得する最も簡単な方法は何ですか?

たとえば、次のようなモデルクラスがあります。

class Category < ActiveRecord::Base
  ...
end

クラスのインスタンスがあります:

category = Category.first

そして、私はYAMLファイルを持っていますconfig/locales/cs.yml

cs:
  activerecord:
    models:
      category: Kategorie

そして、どのモデルクラスのインスタンスを扱っているかを以前に知らなかった場合でも、これを動的に行う必要があります。したがって、「activerecord.models.category」を明示的に指定したくありません。

これを行う簡単な方法はありますか?私はこのようなことができることを知っています

"activerecord.models.#{category.class.name.underscore}"

しかし、これを行うにはより良い方法が必要です。

43
Lukáš Voda

見る:

http://api.rubyonrails.org/classes/ActiveModel/Naming.htmlhttp://guides.rubyonrails.org/i18n.html#translations-for-active-record-モデル

したがって、たとえば、ARクラスでは次を使用します。

Person.model_name.human

またはARインスタンスから:

person.class.model_name.human
86
Jo P

constantize および classify を確認してください。

Rails 5:

category.class.nameを使用できます

0
Mayur Patel