program tip

Ruby on Rails에서 has_many 항목 수를 확인합니다.

radiobox 2020. 12. 11. 08:01
반응형

Ruby on Rails에서 has_many 항목 수를 확인합니다.


사용자는 스 니펫에 태그를 추가 할 수 있습니다.

class Snippet < ActiveRecord::Base

  # Relationships
  has_many :taggings
  has_many :tags, :through => :taggings
  belongs_to :closing_reason

end

태그 수의 유효성을 검사하고 싶습니다. 최소 1 개, 최대 6 개입니다. 어떻게해야합니까? 감사.


언제든지 사용자 지정 유효성 검사를 만들 수 있습니다 .

같은 것

  validate :validate_tags

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

이 SO 게시물 에서 @SooDesuNe 가 더 나은 솔루션을 제공했습니다.

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

을 사용하여 유효성을 검사 할 수 있다고 생각합니다 .reject(&:marked_for_destruction?).length.

이건 어때?

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

아니면 이거.

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.exists?
      groups_length = groups.reject(&:marked_for_destruction?).length
    end
    errors.add(:groups, 'too many') if groups_length > GROUPS_MAX_LENGTH
  end
end

그런 다음 명령 할 수 있습니다.

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

읽어 주셔서 감사합니다.

참조 :

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

참고 URL : https://stackoverflow.com/questions/4836897/validate-the-number-of-has-many-items-in-ruby-on-rails

반응형