validations validates validate rails form ruby-on-rails validation tagging has-many

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 }