2012-09-26 104 views
1

我刚开始使用Rails,我对这种关系感到困惑。 问题很简单,我有一个代表火车站的Station班,和Shop班。我只希望商店有一个车站,代表最近的火车站,所以我想这将是多对一的关系。Rails中的多对一双向关系

没有任何ORM我只是在店铺表中添加一个外地的电台。查找有关轨道的关系后,我结束了

class Shop < ActiveRecord::Base 
    belongs_to :station 
end 

class Station < ActiveRecord::Base 
    has_many :shop 
end 

由于正确地说,店里并没有真正属于一个站我发现这样的怪,所以我想知道这是否是正确的方式继续或如果我感到困惑。

预先感谢您。

+0

那么,如果一家商店只能连接到一个(最近的)车站,那么说它“属于”它并不奇怪。不是一般意义上的,而是在对象关系 – khustochka

+1

嗯,实际上通过写''belongs_to''我有种感觉,如果一个电台被摧毁,它会(或至少可以)串联到商店,这种类型没有任何意义。 无论如何,如果这是正确的方式,我想这只是我还不习惯。 –

+1

这里有一个':dependent'选项(在'has_many'关联中)。这个选项的':nullify'值将保留商店,即使他们的电台被销毁(取消外键)。 – khustochka

回答

1

这是正确的处理方式。 “属于”仅仅意味着“有一把外键” - 这并不一定意味着这是一种用实际方式描述关系的明智方式。

由于发布,代码将不会工作 - 你需要复杂has_many方;即:

class Station < ActiveRecord::Base 
    has_many :shops 
end 

您可以测试的关系由发射了铁轨控制台实际工作(“轨道C”)从您的应用程序文件夹,并创建对象的试验。假设你已经创建了相应的表格,你应该能够做这样的事情:

station = Station.create 
shop = Shop.create 
shop.station = station 
station.shops 
station.shops.build 

...等

+0

好吧,我想我对'belongs_to'这个名字感到困惑,但我想我明白了,谢谢。 –

1

belongs_tohas_many没有描述它们相关对象的所有权或范围或生命周期。他们只是描述对象之间的引用(键)。

这样的引用可以将它们的生命周期与以下依赖关联:自动保存等选项。 其他选项,例如:read_only将引用的版本权限从另一引用中减少。

所有权是一个你必须自己定义的概念。例如:论坛中的帖子可以“属于”具有不同特权的不同用户。谁是主人?管理员?最后一位编辑?创建该帖子的人?对于这种行为,需要额外的定义和机制。我建议你看看这个CanCan的宝石(https://github.com/ryanb/cancan)。

+0

感谢您的回答。好吧,我会更深入地了解依赖和自动保存的内容! –

1
class Station < ActiveRecord::Base 
    has_many :shops, :dependent => "nullify" 
end 

如果你的站被删除,仍然在商店将是他们