ruby-on-rails - 如何有条件地添加索引

标签 ruby-on-rails activerecord

说我有一个模型

class Post < ActiveRecord::Base
  validates_uniqueness_of :title, :unless => Proc.new {|p| p.deleted?}
end

限制是我只能有 1 个帖子的标题是“foobar”,而它没有被删除,还有 1 个以上的帖子,这些帖子都被删除了,而且标题也是“foobar”。由于 ActiveRecord 不能保证来自 this link 的标题的唯一性,我正在尝试向表帖子添加唯一索引,在列 [:title, :deleted] 上,当我尝试将新的已删除帖子插入数据库时​​,该方案将失败。

最佳答案

在 postgresql 中是可能的

add_index :table_name, :columns, unique: true, where: "(deleted_at IS NULL)"

关于ruby-on-rails - 如何有条件地添加索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6321836/

相关文章:

ruby-on-rails - 使用 docker 卷时,本地更改不反射(reflect)浏览器中的更改

ruby-on-rails - Rails 7 升级后的 ActionController::UnknownFormat

ruby-on-rails - Activerecord 返回匹配数组中所有属性的对象

mysql - 如何在 ActiveRecord 中访问 Mysql::Result?

postgresql - 无法将 Padrino 连接到带有 activerecord 的 PostgreSQL 数据库

ruby-on-rails - 名称错误 : uninitialized constant MyJob ActiveJob and Sidekiq

ruby-on-rails - Rails 3 新表单助手和 ERB 的语法错误

jquery - Rails 5 Bootstrap 模式复制前一个窗口

ruby-on-rails - 我可以将 ActiveRecord 关系与 Hstore 中的字段一起使用吗?

ruby-on-rails - Rails 事件记录中的代表