2010-12-06 64 views
0

我有一個城市列表,每個城市都有一個「活動」列(布爾值)。 當我將一個城市設置爲活動狀態時,我希望所有其他城市都不活動。當一個設置爲活動狀態時,將所有條目設置爲不活動

完成此操作的最佳方法是什麼?

我在想另一個存儲活動城市的表。我需要爲此使用單身嗎?如果是這樣,我如何鏈接這兩個表?

我很想得到一些關於如何解決我的問題的例子。謝謝! :-)

編輯: 現在我有一個模型:市

一個城市可以有一個名稱,郵政編碼,它可以爲有效或無效 - 只是三列。

我開始填寫5個城市的數據庫。
當我將City#1設爲活動狀態時,所有其他城市都應爲非活動狀態。
當我將City#2設置爲活動狀態時,所有其他城市都應爲非活動狀態。

爲了實現這一點,我看到兩種不同的方式:
1)設置一個過濾器,當我保存城市時更新所有其他條目。
2)將激活/非激活狀態存儲在第二個表中。

選項2)看起來像一個更清潔的方式,只有一個條目的簡單表。但是在這種情況下模型是什麼樣的?

我真的很感謝你的回覆,夥計們。 :-) 你是否知道這些日子當你感到愚蠢?我有一個這樣的日子。 :-(

選項2):
我有什麼是'城市'和'活動城市'。

市有:
- 標題:字符串
- 郵編:整數

ActiveCity具有:
- 活性:布爾
- city_id =>的引用:城市

has_one :active_city
ActiveCity我的的routes.rb有:
resources :active_cities
resources :cities

以下工作:

c = City.find(1) 
ActiveCity.create(:city_id => c, :active => true) 

當我有好幾個城市,我也可以這樣做:

c2 = City.find(2) 
ActiveCity.create(:city_id => c2, :active => true) 

這意味着我有兩個活躍的城市,現在就是我想要的。

有什麼需要有一個活躍的城市在任何時間?

回答

0

如果一次只能有一個活躍的城市,那麼在用戶表(或城市可能活躍的任何表)中維護城市的外鍵。完全取決於你的要求。有關問題域的更多信息將有所幫助。

+0

這是一個單用戶應用程序 - 現在只有一個表(城市)。 我需要的是我可以設置一個城市進入活動狀態的城市列表。然後cronjob檢查列表併爲活動城市執行特定操作。 這不是什麼奇特的事情,所以我認爲第二張桌子只是爲了保存活躍的城市纔是最佳選擇。 – dmnkhhn 2010-12-06 14:27:57

+0

是的,我也這麼認爲。這將會像用戶將有一個屬性city_id。 `城市has_many:用戶`和':用戶belongs_to城市`。一次活躍的城市。 – Chirantan 2010-12-06 14:39:56

+0

我更新了我最初的問題。 :-) – dmnkhhn 2010-12-06 15:17:38

1

在選項1中,每次要更改活動城市時,都會對該表中的每條記錄執行操作。

在選項2中,每次要更改活動城市時,都會在數據庫中更改1條記錄。

你應該使用選項2,不僅是爲了性能,而是因爲它在邏輯上合理。

選項2的模式應該是什麼樣子Chirantan在最後答案的評論稱

0

你應該去選擇2,而是把一個觸發器在桌子上,這樣就可以不插入多個記錄。