ruby-on-rails - Shoulda Matchers validate_uniqueness_of 范围到多列

标签 ruby-on-rails rspec rspec-rails shoulda shoulda-matchers

我有一个模型,该模型在数据库级别具有唯一索引,并且模型验证检查范围为多列的唯一性。

# 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 继续支持 shouldexpect 语法,但一般指导是坚持使用 expect。在你的情况下,它并不重要,因为 should 直接转换为 expect,但在更一般的用法中,expect 解决了几个问题旧语法的问题。看看这个 summary来自 RSpec 关于原因。

关于ruby-on-rails - Shoulda Matchers validate_uniqueness_of 范围到多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62643100/

相关文章:

ruby-on-rails - 使用 simple_form 显示基本错误

ruby-on-rails - 覆盖 twitter-bootstrap-rails gem 中的 Bootstrap 变量

ruby-on-rails-3 - capybara 2.0+ 中的嵌套功能

ruby-on-rails - Assets 如何在 ruby​​ on rails 的开发环境中预编译?

ruby-on-rails - ActiveRecord 列不存在

ruby-on-rails - Draper - NoMethodError 与装饰器的 RSpec 测试

ruby - 在 RSpec 循环中有条件地应用标签

ruby - WebMock 模拟失败的 API(没有互联网,超时++)

ruby-on-rails - 如何使用 rspec 为序列化器编写单元测试

ruby-on-rails - 从帮助器规范中 stub 一个帮助器方法