1

부모 개체에 속한 자식 수를 어떻게 확인할 것입니까? 내가 답을 속성을 중첩 받아들이는 질문 객체가있는 경우belongs_to ActiveRecord의 형제 수를 제한 하시겠습니까?

예를 들어, :

class Question < ActiveRecord::Base 
    has_many :answers 
    accepts_nested_attributes_for :answers, :allow_destroy => true 
end 

을 내가 답변의 수를 제한하려면, 나는 검사, 응답 객체에 사용자 지정 유효성 검사를 추가 할 수 있습니다 부모와 같은 다른 답변을 계산 :

class Answer < ActiveRecord::Base 

    belongs_to :question 
    validate :check_max_answers 

    private 


    def check_max_answers 
    count = question.answers.select {|a| a != self}.count 
    if (count > 10) 
     errors.add(:answers, 'Too many answers!') 
    end 
    end 

end 

check_max_answers 실행, 그것은 단지 이미 지속 된 다른 답변을 계산합니다.

응답이 중첩 된 특성으로 저장되므로 질문이 저장되지 않아 유효성 검사가 모두 초기 저장을 통과하므로 모두 저장되어 유효하지 않게됩니다!

처음 질문을 저장하기 전에 answers.count가 항상 0이기 때문에 질문 객체에 유효성 검사를 입력하면 마찬가지로 동일한 문제가 발생합니다.

내가 뭘 잘못하고 있니? 이러한 종류의 유효성 검사를 수행 할 수있는 해결 방법이 있습니까? 당신을 위해 결과를 제한해야한다, 내가 제대로 질문을 읽고 있으면 제한 : 어떤 도움

답변

1

해결되었습니다. DB에서 응답 만 계산하는 이유는 .size 대신 .count를 사용했기 때문입니다.

제 경우에는 파괴 된 것으로 표시된 답변도 할인해야합니다. 따라서 질문의 유효성 검사는 다음과 같이 나타납니다.

def check_answers 
    if answers.select{|a|not a._destroy}.size > 10 
     errors.add(:answers, 'Too many answers') 
    end 
    end 

이것은 예상대로 작동합니다.

0

has_many 협회에 대한

덕분에 옵션을 지원합니다.

+0

검색된 항목 수가 제한되는 것처럼 보입니다. 그것은 어떤 검증을하지 않는 것 같습니다. 나는 10 가지 이상의 해답이 처음부터 지속되는 것을 막고 싶다. – Chris