Rails - 使用唯一性范围:一次在2列上

时间:2016-02-22 05:02:00

标签: ruby-on-rails ruby-on-rails-4 model

我希望在3列a.k.a上具有唯一性。如果三列相同则无效

如果列valuecategroy_item_idkey相同,我希望它无效。但是,如果3列中的一列不同而另外2列相同,那么就可以了。

这是我试过的

validates :value, length: { maximum: 65000 }, uniqueness: {  case_sensitive: false, scope: :category_item_id && :key, if: 'key_type == 2'  }

使用上面的代码,如果记录具有相同的key相同的value和不同的category_item_id,则当它应该有效时,它将被视为无效(因为重复值),因为{ {1}}是不同的。如果它具有相同的category_item_idkey但具有不同的category_item_id或相同的valuecategory_item_id且具有不同的value,则会将其作为有效传递。因此,只有相同key相同key且不同value的情况才会被归类为无效。

我无法弄清楚它是否是范围内的category_item_id(我还没有找到正式的方法)或编码工作但我不理解它并且需要改变一些东西得到我想要的结果。

(一切都有&& key_type,你最后注意到了这一点。)

1 个答案:

答案 0 :(得分:1)

唯一性范围允许您传递数组:

validates :value, length: { maximum: 65000 }, uniqueness: { case_sensitive: false, scope: [:category_item_id, :key], if: 'key_type == 2' }