Подтвердите уникальность двух полей, но избегайте, если второй является нулевым - PullRequest
7 голосов
/ 25 апреля 2011

Я хочу проверить уникальность двух полей, но если второй файл равен нулю, просто игнорируйте проверку у меня есть две модели «Актив» и «Компания» Актив имеет уникальный код идентификатора, что я хочу сделать, чтобы проверить уникальность кода идентификатора актива с компанией. мы можем проверить это по

class Asset < ActiveRecord::Base
  validates :identifier, :uniqueness => {:scope => :company_id} 
end

но это также не позволило ноль для двух активов

как я могу игнорировать проверку уникальности кода идентификатора, если его ноль

мы можем передать блок, или добавить except или что-то подобное, что мы можем сделать с фильтрами в контроллере, я ищу какое-то решение, например

проверяет: идентификатор,: уникальность => {: scope =>: company_id}, если {: identifier.is_nil? }

Могу ли я пропустить проверку с помощью некоторого обратного вызова до проверки ??

Ответы [ 2 ]

10 голосов
/ 27 октября 2011

Рубин 1.8.7

validates :identifier, :uniqueness => { :scope => :company_id } , :unless => lambda { |asset| !asset.identifier.nil? }

Рубин 1.9.3

   validates :identifier, :uniqueness: { scope: :company_id }, unless: lambda { |asset| !asset.identifier.nil? }
0 голосов
/ 02 апреля 2014

Это сработало для меня в Rails 4.0.1:

validates_uniqueness_of  :identifier, :scope => :company_id, :allow_blank => true

Я мог создавать объекты с пустыми идентификаторами , но не мог создать два объекта с одинаковым идентификатором внутри одного и того же company .

PS: я знаю, что это было опубликовано давно, но этот способ выглядит также хорошо.Вот Ссылка на аналогичный задний вопрос, где я нашел ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...