Czy istnieje sposób sprawdzenia prawdziwej obecności wszystkich atrybutów w danym obiekcie modelu? Czy muszę podać listę każdego atrybutu za pomocą presence: true
?
Dzięki za pomoc.
Odpowiedzi:
4 dla odpowiedzi № 1Aby uzyskać tablicę wszystkich atrybutów modelu, możesz użyć YourModel.attribute_names
. Jednak nie można naprawdę potwierdzić obecności wszystkich atrybutów (takich jak id
, created_at
), ponieważ będą one puste podczas walidacji podczas tworzenia rekordu.
class YourModel < ActiveRecord::Base
NON_VALIDATABLE_ATTRS = ["id", "created_at", "updated_at"] #or any other attribute that does not need validation
VALIDATABLE_ATTRS = YourModel.attribute_names.reject{|attr| NON_VALIDATABLE_ATTRS.include?(attr)}
validates_presence_of VALIDATABLE_ATTRS
end
1 dla odpowiedzi nr 2
Możesz uzyskać wszystkie nazwy atrybutów w Array
z metodą .attributes_names
.
Następnie wszystko, co musisz zrobić, to dodać to array
do validates_presence_of
metoda.
Przykład:
class Model < ActiveRecord::Base
validates_presence_of attribute_names.reject { |attr| attr =~ /id|created_at|updated_at/i }
end
0 dla odpowiedzi № 3
Tak, możesz dodać wszystkie atrybuty w jednym wierszu w następujący sposób:
validates :name, :login, :email, presence: true