Ruby on rails 是否应验证作用域到多个列的唯一性

Ruby on rails 是否应验证作用域到多个列的唯一性,ruby-on-rails,rspec,rspec-rails,shoulda,shoulda-matchers,Ruby On Rails,Rspec,Rspec Rails,Shoulda,Shoulda Matchers,我有一个在db级别具有唯一索引的模型,模型验证检查唯一性的范围是多个列 # 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 } 在规范中,我有: it{应该

我有一个在db级别具有唯一索引的模型,模型验证检查唯一性的范围是多个列

# 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 }
在规范中,我有:

it{应该验证(:fk\u属于\u-to\u-id)的唯一性。作用域为(%i[col1 col2 col3 col4)。忽略大小写敏感度}

但我一直在犯这样的错误:

    NoMethodError:
       undefined method `all' for Symbol:Class
如何测试多列的唯一性范围


我在他们的文档或任何东西中找不到对此有帮助的任何东西。谢谢你的帮助!

结果是我需要在规范中定义一个
主题
。我只知道与此相关的错误是
反映在关联上的

为了澄清,我只是补充了一点


subject{Model.new}
成功了:p

结果是我需要在规范中定义一个
subject
。我只播下了与此相关的错误,即
反映在关联上

为了澄清,我只是补充了一点


subject{Model.new}
成功了:p

你解决了你自己的问题,这太棒了,但只是给未来读者一个简短的解释:

it{should…}
(另一种选择是
it{is_expected.to…}
)在封面下翻译为
expect(subject)。to…
。因此,两者都假设在此之前当前上下文已经定义了
subject


另一点需要注意的是,尽管RSpec继续支持
应该
期望
语法,但一般的指导原则是坚持使用
期望
。在您的情况下,这并不重要,因为
应该
直接转换为
期望
,而是在更一般的用法中使用
期望
解决了一些关于旧语法的问题。请从RSpec了解原因。

您解决了自己的问题,这非常棒,但只是给未来读者的一个简短说明:

it{should…}
(另一种选择是
it{is_expected.to…}
)在封面下翻译为
expect(subject)。to…
。因此,两者都假设在此之前当前上下文已经定义了
subject


另一点需要注意的是,尽管RSpec继续支持
应该
期望
语法,但一般的指导原则是坚持使用
期望
。在您的情况下,这并不重要,因为
应该
直接转换为
期望
,而是在更一般的用法中使用
期望
解决了一些关于旧语法的问题。请从RSpec了解原因。

Ya,我遵循的是关于使用should的shoulda matchers文档。但是我喜欢你的解释:DYa,我遵循的是关于使用should的shoulda matchers文档。但是我喜欢你的解释:D