创建模型的子集

时间:2010-08-31 18:09:37

标签: ruby-on-rails

我在Rails中有一个代表商店的模型

class Store < ActiveRecord::Base

此模型中的布尔字段“draft”确定记录是否处于活动状态,或者它是否只是草稿。 我正在使用acts_as_xapian在我的应用程序中进行搜索,它会收到一个应该执行搜索的模型。这部分正在运作。但是,我只想对活动的项目(draft == false)

运行搜索

我不确定如何限制act_as_xapian的搜索,但是我也可以通过创建一个新模型来做同样的事情,该模型只包含类Store中的项目,并且草稿== false。

最初我以为我可以使用带有find的方法

def self.active
  find :all, :conditions => {:draft => false}
end

但acts_as_xapian真的想要一个模型。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您可以为此创建范围以简化调用:

named_scope :bloqueado,
  :conditions => { :bloqueado => true }

这意味着您可以随时调用范围:

Store.bloqueado.all

从风格问题来看,我认为你的逻辑是倒置的。通常,最好设置布尔字段来表示肯定断言,例如“已发布”而不是类似于真实含义“未发布”或草稿的内容。这为您提供了“已发布”/“未发布”的逻辑对,而不是“草稿和未发布”/“不草稿,未发布”。