Уникальный на трех разных полях - PullRequest
2 голосов
/ 23 января 2011

Я работаю над веб-приложением Ruby on Rails.Я хочу проверить уникальность более чем одного поля вместе.Как мне это сделать?

Например: у меня есть модель с именем waiting с тремя полями:

project_id category_id и user_id

Iхочу убедиться, что у меня не будет двух одинаковых строк в всех трех полях.

Ответы [ 2 ]

2 голосов
/ 24 января 2011

Почему бы просто:

validates_uniqueness_of :user_id, :scope => [:project_id, :category_id]

+

add_index :waitings, [:project_id, :category_id, :user_id], :unique => true

Читать API:

0 голосов
/ 23 января 2011

Это не красиво, но это работает для меня:

class Waiting < ActiveRecord::Base
  validate :must_be_unique

  def must_be_unique
    if self.class.where(project_id: project_id, category_id: category_id, user_id: user_id).exists?
      errors.add(:base, 'Must be unique')
    end
  end
end

Конечно, вы можете просто использовать уникальный ключ в своей схеме БД, а затем отлавливать соответствующие исключения в тех редких случаях, когда вам нужно.

...