Chcę najpierw sprawdzić poprawność obecności pola i zwrócić jeden komunikat o błędzie, jeśli nie ma wartości dla tego pola. Następnie, zakładając, że weryfikacja obecności przejdzie, chcę przeprowadzić walidację włączenia.Sprawdzanie poprawności włączania szyn bieżących tylko wtedy, gdy obecność przekazuje
Teraz mam:
validates :segment_type, presence: true, inclusion: { in: SEGMENT_TYPES }
Próbowałem podział ten na dwa odrębne walidacji następująco:
validates :segment_type, presence: true
validates :segment_type, inclusion: { in: SEGMENT_TYPES }
Ale jest problem dla obu prób powyżej, gdy nie ma wartości jest zawarty w polu segment_type
, otrzymuję komunikaty o błędach dla obu odpowiedzi:
Segment type can't be blank
Segment type is not included in the list
W tym przypadku chciałbym tylko, aby "Typ segmentu nie mógł być pusty", a nie druga.
Czy jest jakiś sposób, żebym mógł powiedzieć szynom, aby wykonały to warunkowe sprawdzanie poprawności i dać mi pożądaną kaskadę komunikatów o błędach bez konieczności definiowania niestandardowej funkcji, na przykład segment_type_presence_and_inclusion_check
, która sprawdza te warunki w sekwencji i wywołuje je za pomocą validate :segment_type_presence_and_inclusion_check
?
Czy to tylko praca z 'włączenia:'? Nie mogę zastąpić 'inclusion' z niestandardowym walidatorem, a więc używam poniższej metody @ michael-discenza, ale czuję, że powinno to być możliwe przez wywołanie' validates: 'w modelu tylko raz (raczej niż dwa razy). –
nie powinno działać z innymi pomocnikami sprawdzania poprawności. jaki kod próbujesz naprawić? – jvnill
'validates: title, obecność: true, length: {maximum: 255}' 'validates: title, generate_url: true, if: proc {| p | p.title.present? && p.title.length <= 255} ' Mam wtedy' GenerateUrlValidator' w 'app/validators'. –