Rails - поле модели validates_uniqueness_of с обратным значением: scope - PullRequest
0 голосов
/ 27 апреля 2010

Я пытаюсь проверить уникальность какого-либо поля в моей модели одним уловом - это не должно вызывать ошибку, если записи имеют какое-то общее отношение. Для примера вот что я имею в виду:

class Product < ActiveRecord::Base
  belongs_to :category  
end

class Category < ActiveRecord::Base
  has_many :products
end


>>> Category.create({ :name => 'Food' }) # id = 1
>>> Category.create({ :name => 'Clothing' }) # id = 2

>>> p1 = Product.new({ :name => 'Cheese', :category_id => 1, :comments => 'delicious' })
>>> p2 = Product.new({ :name => 'Bread', :category_id => 1, :comments => 'delicious' })
>>> p3 = Product.new({ :name => 'T-Shirt', :category_id => 2, :comments => 'delicious' })
>>> p1.save
>>> p2.save # should succeed - shares the same category as duplicate comment
>>> p3.save # should fail - comment is unique to category_id = 1

, если я использую validates_uniqueness_of :comments, :scope => :category_id, это будет иметь эффект, прямо противоположный тому, что я пытаюсь сделать. Есть ли простой способ сделать это? спасибо.

1 Ответ

3 голосов
/ 27 апреля 2010

Вам нужен пользовательский метод проверки, примерно такой:

validate :validate_comments

def validate_comments
  if Product.count(:conditions => ["comments = ? and category_id != ?", comments, category_id]) > 0
    errors.add_to_base("... Your error message")
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...