2011-04-25 13 views
7

chcę potwierdzić wyjątkowość dwa złożone, ale jeśli drugi złożony jest zero po prostu zignorować walidacji mam dwie modelu „aktywa” i „spółka” aktywami posiada unikalny Kod identyfikacyjny to, co chcę zrobić, to zweryfikować unikalność kodu identyfikacyjnego składnika aktywów w firmie. możemy to sprawdzićWaliduj wyjątkowość dwóch złożony, ale unikać, jeśli druga jest null

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

ale to również nie pozwalają nil dla dwóch aktywów

jak mogę zignorować walidację unikalności kodu identyfikatora jeśli jego nil

możemy przekazać blok, lub dodać except lub coś takiego, co możemy zrobić z filtrami w kontrolerze Szukam jakiegoś rozwiązania, takiego jak

sprawdza: identyfikator,: unikalność => {: scope =>: company_id} unless {: identifier.is_nil? }

Czy mogę pominąć sprawdzanie poprawności przez niektóre przed odbiorem zwrotnym?

Odpowiedz

10

Ruby 1.8.7

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

Ruby 1.9.3

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

ten pracował dla mnie w Rails 4.0.1:

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

mogę tworzyć obiekty z pustymi Identyfikatory, ale nie można utworzyć dwóch obiektów o tym samym identyfikatorze w tym samym firma.

PS: Wiem, że zostało to opublikowane dawno temu, ale ten sposób robienia tego również wygląda dobrze. Tutaj jest Link na podobne tylne pytanie, w którym znalazłem odpowiedź.

Powiązane problemy