Ruby on rails 我如何在没有递归堆栈溢出错误的情况下测试关联的存在?

Ruby on rails 我如何在没有递归堆栈溢出错误的情况下测试关联的存在?,ruby-on-rails,testing,rspec,factory-bot,Ruby On Rails,Testing,Rspec,Factory Bot,我有一个分区模型和一个Scorable模型,它们关联如下: class Division < ActiveRecord::Base has_one :scoring, :as => :scorable validates :name, :presence => true validates :scoring, :presence => true end class Scoring < ActiveRecord::Base belongs_to :

我有一个分区模型和一个Scorable模型,它们关联如下:

class Division < ActiveRecord::Base
  has_one :scoring, :as => :scorable

  validates :name, :presence => true
  validates :scoring, :presence => true
end

class Scoring < ActiveRecord::Base
  belongs_to :scorable, polymorphic: true

  validates :scorable, :presence => true
end

如何测试两个模型中是否存在关联?

您的模型错误。无法验证
部门
模型中是否存在
评分

Division
位于
一侧,其表中没有此类字段。只有
Scoring
模型的表才会有额外的字段
scorable\u id
scorable\u type


将该验证从
部分删除
,您的所有代码都会很好。

Hmm,好的。也就是说,我真的很想确保一个部门总是有一个相关的得分。什么是最好的执行方法?@kmc,没有办法。这是不正确的数据库模式。检查这里的数据库结构:有没有更好的方法来构造我的数据库?各种模型都可以附加一个评分(因此多态性),其中一些是可选的,但我绝对希望每个部门都有一个专门的评分。在回调中创建附加分区是一个可接受的解决方案,还是我的DB结构本身确实有问题?@kmc,创建评分记录时,需要知道可评分id和类型。这意味着首先必须将scroable对象保存到db。如果您的验证阻止保存可烧焦对象,您将一无所获。@kmc,我知道您的担忧。在这种情况下,您可以尝试在控制器中定义它。例如,在同时包含除法和计分的嵌套表单中,如果参数中缺少计分数据,则返回一个错误
FactoryGirl.define do
  factory :division do
    name "Division"
    organisation
    association :scoring, factory: :scoring
end

FactoryGirl.define do
  factory :scoring do
    first 12
    second 10
    third 8
    scorable nil
  end
end