我有一个模型,该模型在数据库级别具有唯一索引,并且模型验证检查范围为多列的唯一性。
# db level
add_index :table1, %i[fk_belongs_to_id col1 col2 col3 col4], unique: true
# model level
validates :fk_belongs_to_id, uniqueness: { scope: %i[col1 col2 col3 col4], case_sensitive: false }
在我的规范中:
它 { 应该 validate_uniqueness_of(:fk_belongs_to_id).scoped_to(%i[col1 col2 col3 col4).ignoring_case_sensitivity }
但我一直收到这个错误:
NoMethodError:
undefined method `all' for Symbol:Class
如何测试多列的唯一性范围?
我无法在他们的文档或任何东西中找到任何可以帮助解决这个问题的东西。感谢您的帮助!
最佳答案
你解决了你自己的问题,这很棒,但只是对 future 读者的快速解释说明:
it { should ... }
(以及替代的 it { is_expected.to ... }
)在幕后翻译成 expect(subject) .到...
。因此,两者都假设当前上下文已经定义了 subject
。
另一件需要注意的事情是,虽然 RSpec 继续支持 should
和 expect
语法,但一般指导是坚持使用 expect
。在你的情况下,它并不重要,因为 should
直接转换为 expect
,但在更一般的用法中,expect
解决了几个问题旧语法的问题。看看这个 summary来自 RSpec 关于原因。
关于ruby-on-rails - Shoulda Matchers validate_uniqueness_of 范围到多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62643100/