我有一个城市列表,每个城市都有一个列'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)
这意味着我有两个活跃的城市,现在就是我想要的。
任何时候都有一个活跃的城市需要什么?
答案 0 :(得分:1)
在选项1中,每次要更改活动城市时,都会对该表中的每条记录执行操作。
在选项2中,每次要更改活动城市时,都会更改数据库中的1条记录。
您应该使用选项2,不仅仅是为了提高性能,还因为它在逻辑上是有道理的。
选项2中的模型应该看起来像Chirantan在最后一个答案的评论中所说的那样
答案 1 :(得分:0)
如果一次只能有一个活动城市,则在用户表(或城市可能处于活动状态的任何表)中维护城市的外键。完全取决于您的要求。有关问题域的更多信息将有所帮助。
答案 2 :(得分:0)
您应该选择选项2,但在表格上设置一个触发器,这样就无法插入多条记录。