2010-12-06 39 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,而是把一个触发器在桌子上,这样就可以不插入多个记录。

相关问题