【发布时间】:2014-03-05 10:42:53
【问题描述】:
似乎是一个非常简单的问题,但我似乎无法在网上的任何地方找到具体答案。
我有一个 price 模型,它同时引用了报价和订单项,因此它有 quote_id 和 line_item_id 列。我正在使用带有unique: true 的多列索引来防止将同一line_item 的多个价格附加到报价中。 quote_id 是索引中的第一列。
但是,我希望允许用户向line_items 添加尚未报价的价格。它适用于一个价格,quote_id 为空,line_item_id 存在。但是,唯一索引阻止我将第二个价格附加到相同的line_item。 quote_id 中的空值被视为唯一。
有没有办法让唯一约束仅在引号不为空时适用?
我知道allow_nil可以在模型验证中使用,但是可以在索引中使用吗?
我在想这样的事情:
add_index :prices, [:quote_id, :line_item_id], :unique => true, :allow_nil => true
PostgreSQL 和 Rails 4.
【问题讨论】:
-
感谢您的链接 - 不知道我是如何错过这个问题的。所以看来我不需要:allow_nil,但问题出在列的顺序上。如果我将 :line_item_id 放在索引中的 :quote_id 之前,它应该允许我要查找的内容,即多个相同的 line_item_ids,quote_id 为 NULL。
标签: sql ruby-on-rails postgresql indexing unique-constraint