Rails - 如何验证两个字段在组合时是唯一的?

时间:2013-01-01 00:56:14

标签: ruby-on-rails ruby validation

我如何确保:

一旦我

type: 1 style: 2

我无法添加

type: 2 style: 1

因为组合应该是唯一的吗?

我想:

validate :unique_relationship

def unique_relationship
  (user_id.to_s + friend_id.to_s).uniq
end

但不要认为uniq会起作用。

2 个答案:

答案 0 :(得分:1)

怎么样

def unique_relationship?
  self.class.where("(user_id = ? and friend_id = ?) or (user_id = ? and friend_id = ?)", user_id, friend_id, friend_id, user_id).empty?
end

如果结果集为empty?,则:user_id:friend_id之间不存在任何关系。

答案 1 :(得分:0)

在这种情况下,我绝对会使用数据库约束,因为数据库可以比在rails中更有效地执行此操作。

您需要创建多列索引

add_index :table, [:column_one, :column_two], unique: true

注意,这意味着创建/更新现在可能会抛出异常。如果你期望这是一个罕见的情况,那可能没问题。如果没有,你会想要做些什么。