是否有{distinct} HABTM关联的简单(应该匹配)验证?

时间:2013-12-31 17:10:43

标签: ruby-on-rails validation associations rspec-rails shoulda

我正在尝试使我当前的规范更具体,以测试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类。

1 个答案:

答案 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不能确保关系的唯一性,它只能确保您在查询时获得不同的结果集。