2010-08-04 59 views
1

我有一个名为language的表,它有一个名为lang_code的列。它有以下值。如何在Rails中应用此过滤器

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中做到这一点?

感谢

回答

3

使用default_scope

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

SWEEEEEEEEEEEEET !!谢谢!!! – bragboy 2010-08-04 08:15:12

0
  1. 创建在其中添加一个迁移:活动列。您设置了默认值(EG默认值为活动)

  2. 在相同的迁移中(请小心调用Language.reset_column_information)或在其他迁移中,您需要处理与(CHI,DAN,VIE)有关的任何数据库关系。然后,它们失活(不活动=真)

  3. 在语言类,可以使用一个default_scope:

    default_scope:条件=> {:活性=>真}

+0

这样,您可以从管理界面激活/取消激活语言。 – 2010-08-04 07:41:39

相关问题