2012-08-15 3 views
0

Store has_many :products 및 제품 belongs_to :store을 사용하여 내 Store 모델과 내 제품 모델간에 매핑하는 연관성을 사용합니다. 나는 최근 제품에 상태 필드를 추가,레일 : 연관을 사용할 때 일부 항목 만 가져 오기

@store = Store.find_by_id params[:store_id] 

을하지만,이 경우, 단순히 매장 정보와이 간단한 코드를 사용하여 매장의 모든 제품을 얻을 수 있습니다. 이 상태는 기본적으로 ON으로 설정되며 사용자가 제품을 제거하려는 경우이 상태는 데이터베이스에서 제품을 삭제하는 대신 OFF로 설정됩니다.

그러나이 경우 이전 코드에서 모든 제품 (제품 상태가 무엇이든)을받습니다.

질문 : 상태 정보가 '켜짐'인 매장 정보 및 유일한 제품을 얻으려면 어떻게해야합니까?

미리 감사드립니다.

답변

1

당신은 당신의 모델에 대한 기본 범위를 사용할 수 있습니다

class Product < ActiveRecord::Base 
    default_scope where(status: "on") 
end 

갱신 :

당신은 그런 기본 범위를 건너 뛸 수 있습니다

:

@store.products.unscoped 

당신은 기본 범위를 사용하지 않으려면 당신은 이것을 시도 할 수있다 :

@store.products.where(status: "on") 
+0

T 너의 도움이 4 번 행크스. 그러나 이렇게하면 모든 제품 쿼리가 'ON'제품으로 제한됩니다. 제품 목록이나 제품 정보는 표시 할 수 있지만 통계는 표시 할 수 없습니다. 예 : 활성 제품의 %/생성 된 총 제품, 로그, ... – htaidirt

+0

고마워. 나는 지금 완벽하게 작동한다. – htaidirt

1

당신은 has_many

has_many :products, :conditions => {:status => 'ON'} 

:conditions => {:status => 'ON'}을 추가 할 수 있습니다 그러나 그것은 또 다른 방법은 그래서 당신이 얻을 수있는 제품 모델

scope :active, where(:status => 'ON') 

에 범위 이름을 추가하고 @store.products

만 "활성"제품을 표시합니다 @store.products 및 "활성"제품을 포함한 모든 제품 @store.products.active

+0

'scope : active'의 사용은 흥미로 웠습니다. 확실히 시도하십시오. 고마워요. – htaidirt

관련 문제