2017-10-26 1 views
0

건물 및 목록의 두 가지 모델이 있습니다. Listing 모델은 Building에 속합니다. 주어진 시간에 활성 리스팅 레코드 수에 따라 Listing에서 생성 할 수있는 레코드 수를 제한하려고했습니다. Listing.active.count 우리는 건물의 정수 열이 한계로 사용 된 경우 유효성 검사를 사용하려고 X.보다 더 결코 수 있지만, 작업을 다음과 같은 오류가 발생하지 않은레일 5.1 다른 객체에 종속 된 객체의 유효성 확인

undefined method `>=' for #<Array:0x007f05ec4db388> 

Class Listing < Application Record 
    validates :validate_listing_count, on :create 

    private 
    def validate_listing_count 
     errors.add(:base, "You have too many active listings, please destroy a listing or contact your Account Manager if you need more listings") unless too_many_siblings? 
    end 

    def active_siblings 
     building.listings.where(active: true) 
    end 

    def too_many_siblings? 
     active_siblings.select { |sib| sib.id != id } >= (building.listing_limit - 1) 
    end 
end 

답변

1

active_siblings.select Listing.rb 배열을 반환하고 배열의 항목 수를 원한다. 이 시도 :

def too_many_siblings? 
    active_siblings.select { |sib| sib.id != id }.count >= (building.listing_limit - 1) 
end 

질문의 일부가 아니었다, 당신은 validate_listing_countifunless을 변경할 수 있습니다로. 나는 이것이 문제에 대한 당신의 묘사에 더 논리적 인 근거를 둔다고 생각한다.

+0

나는 그것을 시도했지만 동일한 오류가 발생했습니다. 우리 대학은 그가 잘못된 방식으로 접근했을 수도 있다고 생각합니다. –

+1

다시 시도하고 싶을 수도 있습니다. 내 코드가 올바르지 않을 수도 있지만 오류가 발생해서는 안됩니다. 코드에'> = '연산자가 있습니까? BTW, 레일즈 콘솔을 테스트에 사용하고 있다면 새로운 모델 코드가로드되도록 모델을 변경할 때마다 콘솔을 종료하고 다시 열어야합니다. –

+0

그래, 우리는 당신의 업데이트 된 코드를 보았고 그 코드는 반대가되었다. 그것은 내가 현재/너무 많은 활성 레코드를 가지고 있다는 말 때문에 새로운 레코드 나 기존 레코드를 업데이트/생성 할 수 없습니다. (테스트를 위해 사용하는리스트 한계는 3이고 활성 레코드는 하나입니다) –

관련 문제