1

Fakerを使用して模擬データの構築を支援する宝石があります。同じ構文Faker自体が使用している新しいカテゴリのものを生成する新しいクラスを追加したいと思います。前半は簡単です。クラスを定義し、宝石がファイルをロードすることを確認してください。

# lib/faker/restaurant.rb
module Faker
  class Restaurant < Base
    class << self
      def name
        parse('restaurant.name')
      end
    end
  end
end

ここまでは順調ですね。ここで、これから得られる値を説明するために、YAML ファイルを作成します。

faker:
  en:
    restaurant:
      suffix: [Cafe,Restaurant]
      name:
        - "#{Name.first_name}'s #{suffix}"

では、実際の質問:このファイルはどこに移動し、どのような名前を付ける必要がありますか? これがRailsアプリケーションならconfig/locales/faker.en.yml. 宝石では、それは機能していないようです-実際には「config」ディレクトリはありませんが、この目的のために作成しても役に立ちません。

> Faker::Restaurant.name
I18n::MissingTranslationData: translation missing: en.faker.restaurant.name
4

1 に答える 1

2

わかりました。daxに特に感謝します。そのコメントは私を正しい方向に導いてくれました。

Faker はローカリゼーションに I18n gem を使用します (これが、YAML ファイルが「locales」ディレクトリに存在する理由です)。つまり、カスタム YAML を I18n ロード パスに追加する必要がありました。ファイルがロード パスに追加されている限り、ファイルの正確な場所は問題ではありません。私の場合、それを に配置しlib/faker/locales/en-US.yml、そのディレクトリ全体をロード パスに追加しました。

lib/my_gem.rb:

I18n.load_path += Dir[File.join(File.expand_path(File.dirname(__FILE__)), 'faker/locales', '*.yml')]
require "faker/restaurant"

.ymlそのディレクトリに置いたファイルはすべて読み込まれ、Faker で利用できるようになります。

補足: YAML 形式も少し変更する必要がありました。

en:
  faker:
    <stuff>

私が持っていたように、トップレベルのフェイカーではなく。

于 2015-01-26T16:45:41.943 に答える