2010-08-04 60 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

相關問題