0

has_many :productsStoreと Productを使用して、関連付けを使用して Store モデルと Product モデルをマッピングしますbelongs_to :store。この場合、次の単純なコードを使用して、店舗情報と店舗のすべての製品を簡単に取得できます。

@store = Store.find_by_id params[:store_id]

しかし、最近、製品にステータスフィールドを追加しました。このステータスはデフォルトで ON に設定されており、ユーザーが製品を破棄したい場合、このステータスはデータベース上の製品を削除する代わりに OFF に設定されます。

しかし、この場合、前のコードでは、すべての製品を取得します (製品のステータスが何であれ)。

質問: ストア情報を取得し、:status => 'ON' の製品のみを取得するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

1

モデルにデフォルトのスコープを使用できます

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

アップデート:

次のようなデフォルトのスコープをスキップできます。

@store.products.unscoped

デフォルトのスコープを使用したくない場合は、次のことを試すことができます。

@store.products.where(status: "on")
于 2012-08-15T11:38:49.200 に答える
1

に追加でき:conditions => {:status => 'ON'}ますhas_many

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

ただし、「アクティブな」製品のみが表示されます@store.products

別の方法は、名前付きスコープを製品モデルに追加することです

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

@store.productsしたがって、すべての製品と「アクティブな」製品を取得できます@store.products.active

于 2012-08-15T11:57:42.383 に答える