yoshiori.github.io

【解決済み】FactoryGirl の Relation の定義の仕方がよくわからない><

FactoryGirl で relation 定義したいんだけど、具体的には

1
2
3
4
5
6
7
class User < ActiveRecord::Base
  has_many :tasks
end
class Task < ActiveRecord::Base
  belongs_to :user
  validates :user, :presence => true
end

こんな 2 つのモデルで

users.rb
1
2
3
4
5
6
7
8
9
FactoryGirl.define do
  factory :user do
    tasks do
      [
       FactoryGirl.create(:task) ,
      ]
    end
  end
end
tasks.rb
1
2
3
4
5
FactoryGirl.define do
  factory :task do
    user
  end
end

みたいな定義をしておくと……

1
2
3
 Failure/Error: Unable to find matching line from backtrace
 SystemStackError:
     stack level too deep

まぁ、メッセージの通り循環参照になっちゃうからダメなのは分かる。

でも、:user の宣言から tasks 外すと

1
FactoryGirl.create(:user).tasks

で何も返ってこないし、逆に :task の方で user 外すと 今度は presence のバリデーションに引っかかっちゃう

絶対書き方間違えてるせいなんだけど、どうやったらいいのかわからない>< 教えてエロイ人!!!!

追記

@yoshiori こんな感じでどうでしょうか https://t.co/ScRDRvLK

と教えてもらいました

@yoshiori すいません、さっきのは循環しそうなので、修正しました。 https://t.co/ScRDRvLK

とのことでしたが僕の手元では trait 使わなくても行けました!!! ありがとうございます!!!

他にも

@yoshiori こうでどうだろうか http://t.co/Sf1oc9OV

@yoshiori userの定義に、after :create do … end でtasksを追加するとよさそうー

といろいろな方が教えてくれました!!! ありがとうございます!!!

Comments