如何在Rails中应用此过滤器

时间:2010-08-04 07:21:31

标签: ruby-on-rails activerecord model filter

我有一个名为language的表,其中有一个名为lang_code的列。它具有以下值。

id  lang_code  created_at           updated_at
1   ARA        2010-07-29 15:27:25  NULL
2   CHI        2010-07-29 15:27:25  NULL
3   DAN        2010-07-29 15:27:25  NULL
4   DEU        2010-07-29 15:27:25  NULL
5   ESP        2010-07-29 15:27:25  NULL
6   KOR        2010-07-29 15:27:25  NULL
7   VIE        2010-07-29 15:27:25  NULL

我要求从此表中删除3种语言(CHI,DAN和VIE)。我只需编写一个迁移并从表中永久删除值。但我不想这样做。相反,我想在模型级别中过滤它们,以便我在此特定模型上执行的任何操作都不应该包含这三种语言。如何在Rails中做到这一点?

由于

2 个答案:

答案 0 :(得分:3)

使用default_scope

class Language < ActiveRecord::Base
  UNWANTED_LANGUAGES = ["CHI", "DAN", "VIE"]
  default_scope :conditions => ["lang_code not in (?)", UNWANTED_LANGUAGES]
  ...
end

答案 1 :(得分:0)

  1. 您可以在其中添加:活动列来创建迁移。您设置了默认值(EG默认为活动状态)

  2. 在相同的迁移(小心调用Language.reset_column_information)或其他迁移中,您将处理与(CHI,DAN,VIE)相关的任何数据库关系。然后,你将它们取消激活(inactive = true)

  3. 在Language类中,使用default_scope:

    default_scope:conditions =&gt; {:active =&gt; true}