我正在尝试使我当前的规范更具体,以测试Thing.Others的独特/独特性
class Thing < ActiveRecord::Base
has_and_belongs_to_many :others, -> { distinct }
end
describe Thing do
it { should have_and_belong_to_many(:others).x }
end
我目前对x
没有任何内容:规范通过,我可以在其他规格中有效地创建和保存来自其他类的内容。
当我用x
替换distinct
时,我得到NoMethodError: undefined method 'distinct' for #<Shoulda::Matchers::...
。
如果我将{ distinct }
替换为{ where(distinct: true) }
并将conditions(distinct: true)
放入x
,则验证通过,但其他规格无法正确保存Thing类。
答案 0 :(得分:0)
不,对于不同的HABTM关联,没有简单的shoulda-matchers验证。 distinct
只是一大类查询机制之一,可用作指定范围的一部分,并且没有明确支持在shoulda中测试它。
您收到NoMethodError
因为distinct
不是shoulda的AssociationMatcher
的实例方法(有关完整列表,请参阅https://github.com/thoughtbot/shoulda-matchers/blob/master/lib/shoulda/matchers/active_record/association_matcher.rb)。
作为您可能已经注意到的一个相关的旁边,distinct
不能确保关系的唯一性,它只能确保您在查询时获得不同的结果集。