2011-01-25 2 views
0

어떤 카테고리의 5 개 리뷰와 달리 특정 카테고리의 5 개 리뷰 만 표시하려고합니다. 나는 비교 목적을 위해 일하고 있던 나중에 게시했습니다.Ruby on Rails 3 제한 다중 테이블 쿼리 및 배열 유형 변환

리뷰에는 카테고리 ID 색인이 있습니다.이 색인을 사용하여 카테고리 이름을 찾고 원하는 이름의 카테고리 이름을 비교합니다. 그런 다음 배열에서 추출한 5 개의 리뷰를 저장합니다 (가장 효율적인 방법입니까?). 리뷰와 카테고리는 두 개의 별개의 테이블입니다.

현재 "리뷰를 배열로 변환 할 수 없습니다"오류가 발생합니다. 나는 이것이 형변환 문제라고 생각 하나? Review가 배열이되기를 원하지 않습니다. @review가 5 개의 리뷰를 보유하고있는 이전 코드와 동일한 결과를 얻길 바랍니다. 이 문제에 올바르게 접근하고 있는지 확실하지 않습니다.

현재 코드

def home 
    @review = [] 
    idx = 1 
    Review.find_each do |review| 
     break if idx == 5 
     @category = Category.find(review.category_id).category_name 
     if @category == "Something" 
     @review += review and idx+=1 
     end 
    end 
    end 

기존 코드

def home 
    @review = Review.find(:all, :limit => 5) 
end 
도와

감사합니다!

답변

1

review에는 Review 개체가 포함되어 있으며이 개체를 배열에 연결하려고 시도하지만 배열 연결은 배열간에 만 작동합니다.

[1,2,3]+[4][1,2,3,4]이지만, [1,2,3]+4은 오류를 나타냅니다.

당신은 << 또는 push 대신 사용하거나 배열에서 검토 객체를 포장 할 수 있습니다 각각 ...

@reviews << review 

또는

@reviews.push review 

또는

@reviews += [review] 

.


또는 나는 당신이하려는 일을하는 관용적 인 방법이있을 것이라고 확신합니다.

아직 모든 rails3 물건 잘 모르겠지만, 뭔가 같은 :

class Review < ActiveRecord::Base 
    ... 
    belongs_to :category 
    ... 
end 
: Review (검토) 모델에서

:

Category.where(:category_name => "Something").first.reviews.limit(5) 

이 검토 및 범주 사이의 관계를 가정

카테고리 모델 :

+0

설명해 주셔서 감사합니다. 이제 작동 중입니다. 더 관용적 인 방법으로 나는 동의하지만 카테고리/검토에는 부모/자식 관계가 없으므로 해결책이 작동하지 않습니다.리뷰에는 단지 카테고리의 외래 키가 있습니다. – John

+0

관계는 부모/자식이어야 할 필요는 없으며, 연관을 설정하기 위해 외래 키만 필요합니다 (그렇게하는 데 부당한 제한이 없다고 가정 할 때). 위 유스 케이스는 연결을 정의하는 것과 같은 이유입니다. –

+0

내가 얻는 오류는 "정의되지 않은 메소드'리뷰 '가 # <카테고리 : 0x53e0ff8>"입니다. 더 설명 할 수 있습니까? 나는 이것이 어떻게 작동하는지 이해하지 못한다. 카테고리에는 review_id 외래 키가 없으므로 카테고리에서 리뷰를 호출 할 수 있습니까? 리뷰에만 카테고리의 외래 키가 있습니다. – John