Ruby on rails 我如何在没有递归堆栈溢出错误的情况下测试关联的存在?
我有一个分区模型和一个Scorable模型,它们关联如下: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 :
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