Re:ゼロから始めるNo Error No Life

ぷろぐらみんぐ的なことと趣味的な日常を少々

Rspecに初心者が挑む③

躓く、躓きまくった箇所

たぶんfactory_girlのドキュメントにすら載ってない。

かつqiitaにも落ちてない。

おそらくこれ命名規則違反?なのかな?って考えつつ動かしたら動いた事案について。

たぶんまだまだ改修の余地ありなので拙いソースになるかと思います。

ただ書いてあるのは、「class名がfactory名と異なるなら指定」

いやわからんてーーーってのが感想です。

以下参考までに走り書きします。

#app/models/test_info.rb
class TestInfo < ActiveRecord::Base
  belongs_to :HogeInfo, :foreign_key => "code_number", :primary_key => "code_number"
end

#app/models/hoge_info.rb
class HogeInfo < ActiveRecord::Base
  has_many :TestInfo, :foreign_key => "code_number", :primary_key => "code_number"
end

#上記みたいな関係のmodelがあったとします。
#よくある1対Nの関係です
#これをfactory_girlで定義するには?

#associationを使います。
FactoryGirl.define do# 初期データ作成用
  factory :test_info do
    association :HogeInfo
  end
end
#これで何ら問題なさそうに見えるんですが、実際問題がありまして
#アソシエーション先つまりbelongs_toされているmodel(class)の方の記述を以下のようにします
#記述しないと永遠にエラーが発生します。困ったことに。
FactoryGirl.define do
  factory :hoge_info, aliases: [:HogeInfo] do
    factory :hoge_first do
    end
  end
end

#上記の様に入れ子にすることにより、指定した属性でデータが作成可能です。
#入れ子の方を指定してデータの作成を行う際は、以下の様に書きます。

association :HogeInfo, factory: :hoge_first

#ただ複数レコードほしくない場合とかの回避方法がまだ模索中です・・・・

ドキュメントを母国語の様に読めるようになりたいですね。

先が思いやられます。

factory_girlでのデータ作成にここ一週間くらい手こずってます。。。

テスト駆動での開発ではなかったのもあってアソシエーションの箇所の作成に躓いてます。

補足しますとそもそもappの方のclass名とfactory名が異なっててfactoryが迷子になる

だからひとまず、aliasesでclass名を付けてあげる

デフォだと「_」がついててこやつの扱いに困ってましたね。

なので以下でも動作します。

FactoryGirl.define do
  factory :HogeInfo do
    factory :hoge_first do
    end
  end
end

よきエンジニアライフをおおおお!