Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我有两个相互依赖的模型是有效的。我如何为他们创建有效的工厂?_Ruby On Rails_Ruby_Rspec_Factory Bot - Fatal编程技术网

Ruby on rails 我有两个相互依赖的模型是有效的。我如何为他们创建有效的工厂?

Ruby on rails 我有两个相互依赖的模型是有效的。我如何为他们创建有效的工厂?,ruby-on-rails,ruby,rspec,factory-bot,Ruby On Rails,Ruby,Rspec,Factory Bot,我有一个调查模型和问题模型,如下所示调查必须至少有1个问题,问题必须属于以下所示的调查: class Survey < ActiveRecord::Base has_many :questions, class_name: 'Question', inverse_of: :survey validates :title, presence: true, length: { maximum: 200 } validates_length_of :questions, maxim

我有一个
调查
模型和
问题
模型,如下所示<代码>调查必须至少有1个
问题
问题
必须属于以下所示的
调查

class Survey < ActiveRecord::Base
  has_many :questions, class_name: 'Question', inverse_of: :survey

  validates :title, presence: true, length: { maximum: 200 }
  validates_length_of :questions, maximum: 100, minimum: 1
end

class Question < ActiveRecord::Base
  belongs_to :survey, class_name: 'Survey', inverse_of: :questions

  validates :title, presence: true, length: { maximum: 200 }
  validates :survey, presence: true
end
然后,我想删除问题工厂中的调查关联,或者删除调查工厂中(:build)回调后的
。然而,这将导致无效工厂


似乎应该有一个简单的方法来解决这个问题,因为我只有两个简单的模型,需要另一个,但我被卡住了…

为什么不让调查工厂指向一个没有调查工厂的问题工厂

FactoryBot.define do
  factory :question do
    title  { Faker::Lorem.characters(10) }
    survey nil

    factory :question_and_survey do
      survey
    end
  end
end
这意味着该
创建(:问题和调查)
将在调查中返回一个问题,共有6个问题。总比没有好,对吧

但是,正如你的问题,你真的应该考虑允许一个空的调查创建。只是头发拉扯少了很多


我想知道像这样的循环依赖是一个好主意吗?<代码> Realth.Quase= BuudLyLIST(问题,5,调查:NIL)< /Calp> <代码>,但是正如你的问题的评论一样,你确实应该考虑允许一个空的调查被创建。只需少拉头发。
->最终是最好的解决方案。
FactoryBot.define do
  factory :question do
    title  { Faker::Lorem.characters(10) }
    survey nil

    factory :question_and_survey do
      survey
    end
  end
end