1

在我的网站上,版主可以标记垃圾评论。当这些评论被标记时,它们会被隔离,因此它们不再出现在常规视图中,尽管它们仍然可以在管理控制面板中看到。目前,我将它们排除在常规视图之外,如下所示:

@comments = Comment.where(:flagged => false)

我在每个有评论的控制器中都这样做,其中有很多。我觉得在 Rails 中有一种更简洁的方法来处理这个问题。也许在评论模型的某个地方,我可以指定在查询评论时,只检索那些没有被标记的。如果是这样,那是怎么做的?即使这不可能,还有其他方法可以干掉这段代码吗?

4

2 回答 2

5

你可以使用默认范围

default_scope where(:flagged => false)

http://apidock.com/rails/ActiveRecord/Base/default_scope/class

可以使用unscoped忽略默认范围。请参阅http://apidock.com/rails/ActiveRecord/Base/unscoped/class

我更喜欢使用范围而不是默认范围,因为当需要所有记录时我不必覆盖它。取决于获取所有/未标记记录的频率。

于 2012-10-11T16:41:59.653 回答
2

创建一个范围(在本例中命名为“干净”):

class Comment < ActiveRecord
  scope :clean, where(:flagged => false)
end

然后使用:

@comments = Comment.clean

为了面向未来,您可能希望添加一个名为的类方法default_view,该方法只调用clean并使用它。随着您的“默认”需求发生变化,只需修改default_view方法即可。

于 2012-10-11T16:38:09.977 回答