Validieren Sie die Anzahl der has_many-Elemente in Ruby on Rails

Benutzer können Tags zu einem Snippet hinzufügen:

class Snippet  :taggings belongs_to :closing_reason end 

Ich möchte die Anzahl der Tags validieren: mindestens 1, höchstens 6. Wie soll ich das machen? Vielen Dank.

Sie können immer eine benutzerdefinierte validation erstellen.

Etwas wie

  validate :validate_tags def validate_tags errors.add(:tags, "too much") if tags.size > 5 end 

Eine bessere Lösung wurde von @SooDesuNe in diesem SO-Post bereitgestellt

 validates :tags, length: { minimum: 1, maximum: 6 } 

Ich denke, Sie können validieren mit .reject(&:marked_for_destruction?).length .

Wie wäre es damit?

 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 

Oder dieses.

 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 

Dann können Sie befehlen.

 @user.assign_attributes(params[:user]) @user.valid? 

Danke fürs Lesen.

Verweise:

http://homeonrails.com/2012/10/validating-nested-associations-in-rails/ http://qiita.com/asukiaaa/items/4797ce44c3ba7bd7a51f