2010-11-20 13 views
1

開発用のsqlite3データベースをテストデータベースにエクスポートしようとしています。これを行うために、私は最初に自分のモデルをレールコンソールにエクスポートし、それをファイルに保存しました。rspec(レールプロジェクト)にto_yamlファイルが正しくロードされていません

> MyModel.all.to_yaml # this was saved to mymodels.yml 

私はrspecを実行すると、mymodels.ymlを解析しようとして失敗します。私が得るエラーは:

Failure/Error: Unable to find matching line from backtrace 
a YAML error occurred parsing /Users/MakeM/MyProject1/spec/fixtures/mymodels.yml. 

Please note that YAML must be consistently indented using spaces. Tabs are not allowed. Please have a look at http://www.yaml.org/faq.html The exact error was: NoMethodError: undefined method `keys' for nil:NilClass

なぜこのエラーが発生しているのですか?私が言及しなければならないことの1つは、to_yamlによって出力されるyamlが少し奇妙に見えるということです。ここではその一部です:

--- 
- !ruby/object:MyModel 
    attributes: 
    id: 133 
    book: FirstBook 
    chapters: 50 
    created_at: 2010-10-06 05:03:15.709931 
    updated_at: 2010-10-06 05:03:15.709931 
    abbr: FB 
    attributes_cache: {} 

    changed_attributes: {} 

    destroyed: false 
    marked_for_destruction: false 
    new_record: false 
    previously_changed: {} 

    readonly: false 

答えて

0

それはデータのみを使用することをお勧めしますあなたのデータベースに保存しないすべてのデータが役に立たないので、そのようなあなたのYAMLを生成しよう:

MyModel.all.map(&:attributes).to_yaml 

警告、このテクニクスはあなたのRAMを爆発することができますあなたは大量のデータがある場合。限界/オフセットであなたのハムを生成すると思います。またはwill_paginateからのpaginated_eachを使用します。

+0

ありがとうございます! .map(&:attributes)は正確に何をしますか?私はグーグルを試みたが、私が理解するのを助けるために何かを考え出すことはなかった。 – MakeM

+0

これはどちらもうまくいかないようです。私は同じ "失敗/エラー:バックトレースから一致する行を見つけることができません のための不正なデータ..."エラーが発生します。 yamlはそれがどのように見えるべきかにはるかに近く見えますが。 – MakeM

+0

map(&:attributes)すべての属性メソッドを呼び出すと、結果の配列を生成します。 – shingara

関連する問題