validates - Valide la cantidad de elementos has_many en Ruby on Rails
validate form rails (3)
Los usuarios pueden agregar etiquetas a un fragmento:
class Snippet < ActiveRecord::Base
# Relationships
has_many :taggings
has_many :tags, :through => :taggings
belongs_to :closing_reason
end
Quiero validar la cantidad de etiquetas: al menos 1, como máximo 6. ¿Cómo voy a hacer esto? Gracias.
Creo que puedes validar con el uso de .reject(&:marked_for_destruction?).length
.
¿Qué tal esto?
class User < ActiveRecord::Base
has_many :groups do
def length
reject(&:marked_for_destruction?).length
end
end
accepts_nested_attributes_for :groups, allow_destroy: true
validates :groups, length: { maximum: 5 }
end
O esto.
class User < ActiveRecord::Base
has_many :groups
accepts_nested_attributes_for :groups, allow_destroy: true
GROUPS_MAX_LENGTH = 5
validate legth_of_groups
def length_of_groups
groups_length = 0
if groups.present?
groups_length = groups.reject(&:marked_for_destruction?).length
end
errors.add(:groups, ''too many'') if groups_length > GROUPS_MAX_LENGTH
end
end
Entonces, puedes mandar.
@user.assign_attributes(params[:user])
@user.valid?
Gracias por leer.
Referencias
http://homeonrails.com/2012/10/validating-nested-associations-in-rails/ http://qiita.com/asukiaaa/items/4797ce44c3ba7bd7a51f
Siempre puedes crear una validación personalizada .
Algo como
validate :validate_tags
def validate_tags
errors.add(:tags, "too much") if tags.size > 5
end
Una mejor solución ha sido provista por @SooDesuNe en esta publicación SO
validates :tags, length: { minimum: 1, maximum: 6 }