2013-06-18 4 views
0

두 가지 모델, User와 Product가 있습니다. 한 제품에는 소유자로 한 명의 사용자 만 있습니다. current_user가 이미 소유하고있는 제품을 제외한 모든 제품을 수집하려고합니다. 그래서 난 내 응용 프로그램/컨트롤러/products_controller.rb에서이 같은 짓 :"무언가가없는"조건의 배열 필터링

def index 
    Product.all.each do |p| 
    if p.owner != current_user 
     @filtered_products = [ @filtered_products, p ] 
    end 
    end 
    @products = @filtered_products.paginate(page: params[:page]) 
end 

을하지만 그것은 좋은 방법이 아니다 가정합니다. 당신은 더 나은 것을 아십니까?

답변

0

간단한 where을 사용하지 않으시겠습니까? 구축 배열이 빈 배열을 인스턴스화하고 대신 당신이하고있는 재 할당 일의 <<를 사용하는 경우도

def index 
    @products = Product.not_owned_by(current_user).page(params[:page]) 
end 

class Product < ActiveRecord::Base 
    belongs_to :user 

    def self.not_owned_by(u) 
    where("owner_id <> ?", u.id) 
    end 
end 

는 더 빨리 약 4 배를 그리고 당신은 또한 처음에는 nil 값으로 끝나지 않습니다 색인.

+0

감사합니다. 구문 적으로 데이터베이스에 종속적입니까? –

+0

모든 주요 데이터베이스는'<>'와'! ='를 지원합니다. 나는 어느 것이 더 널리 퍼져 있는지 확신하지 못한다. –

+0

오키, 정말 고마워! –