0

我使用关联来映射我的 Store 模型和我的 Product 模型,使用 Storehas_many :products和 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 回答