当一个设置为活动时,将所有条目设置为非活动状态

时间:2010-12-06 12:12:35

标签: ruby-on-rails database-design

我有一个城市列表,每个城市都有一个列'active'(布尔值)。 当我将一个城市设置为活动时,我希望所有其他城市都处于非活动状态。

实现这一目标的最佳方法是什么?

我在想另一张存放活跃城市的桌子。我需要使用单身吗?如果是这样,我如何链接这两个表?

我很想得到一些关于如何解决问题的例子。谢谢! : - )

编辑: 现在我有一个型号:城市

城市可以有一个名称,一个邮政编码,它可以是活动的或非活动的 - 只有三列。

我开始用5个城市填充数据库 当我将城市#1设置为活动时,所有其他城市应该处于非活动状态 当我将City#2设置为活动状态时,所有其他城市都应处于非活动状态。

要做到这一点,我会看到两种不同的方式:
1)设置一个过滤器,在我保存城市时更新所有其他条目 2)将活动/非活动状态存储在第二个表中。

选项2)看起来更简洁,只有一个条目的简单表格。但是在这种情况下模型看起来是什么样的?

我非常感谢你的回复,伙计们。 :-) 你知道这些日子你觉得愚蠢吗?我有一天。 : - (

选项2):
我所拥有的是“城市”和“活跃城市”。

城市有:
- title:string
- zipcode:整数

ActiveCity有:
- active:boolean
- city_id =>参考:城市

城市has_one :active_city
ActiveCity belongs_to :city

在我的 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)

这意味着我有两个活跃的城市,现在就是我想要的。

任何时候都有一个活跃的城市需要什么?

3 个答案:

答案 0 :(得分:1)

在选项1中,每次要更改活动城市时,都会对该表中的每条记录执行操作。

在选项2中,每次要更改活动城市时,都会更改数据库中的1条记录。

您应该使用选项2,不仅仅是为了提高性能,还因为它在逻辑上是有道理的。

选项2中的模型应该看起来像Chirantan在最后一个答案的评论中所说的那样

答案 1 :(得分:0)

如果一次只能有一个活动城市,则在用户表(或城市可能处于活动状态的任何表)中维护城市的外键。完全取决于您的要求。有关问题域的更多信息将有所帮助。

答案 2 :(得分:0)

您应该选择选项2,但在表格上设置一个触发器,这样就无法插入多条记录。