Ruby on rails Rails中的多对一双向关系

Ruby on rails Rails中的多对一双向关系,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我刚开始学习Rails,我对它们之间的关系感到困惑。 问题很简单,我有一个表示火车站的站类和一个商店类。我只是想让商店有一个车站,代表最近的火车站,所以我想这将是一个多对一的关系 如果没有任何ORM,我只需在shop表中添加一个station的外键。在查阅了rails的关系之后,我发现 class Shop < ActiveRecord::Base belongs_to :station end class Station < ActiveRecord::Base

我刚开始学习Rails,我对它们之间的关系感到困惑。 问题很简单,我有一个表示火车站的
类和一个
商店
类。我只是想让商店有一个车站,代表最近的火车站,所以我想这将是一个多对一的关系

如果没有任何ORM,我只需在shop表中添加一个station的外键。在查阅了rails的关系之后,我发现

class Shop < ActiveRecord::Base
    belongs_to :station
end

class Station < ActiveRecord::Base
    has_many :shop
end
class-Shop
正确地说,这家商店并不属于我觉得有点奇怪的车站,所以我想知道这是正确的方式,还是我感到困惑


先谢谢你

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

此类引用的生命周期可以与:dependent、:autosave等选项绑定。 其他选项,如:只读,减少版本从引用到其他版本的权限


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

这是正确的方法。“属于”简单的意思“有外键”-这不一定意味着这是一种用实际术语描述关系的明智方式

如前所述,代码不会很有效-您需要将代码的多个方面多元化;i、 e:

class Station < ActiveRecord::Base
    has_many :shops
end
…etc

类站“无效”
结束

如果你的站点仍然被删除,商店将成为他们的

好吧,如果一个商店只能连接到一个(最近的)站点,那么说它“属于”它并不奇怪。当然不是在一般意义上,而是在对象关系上,事实上,通过写
属于
我有一种感觉,如果一个电台被摧毁,它会(或至少可以)级联到商店,这是没有意义的。无论如何,如果这是正确的方式,我想这只是因为我还不习惯。这有一个
:dependent
选项(在
中有许多关联)
:nullify
此选项的值将保留店铺,即使他们的站点被破坏(使外键无效)。好的,我想我对“属于”这个名称有点困惑,但我想我知道了,谢谢。谢谢你的回答。好的,我将进一步研究依赖和自动保存的内容!
station = Station.create
shop = Shop.create
shop.station = station
station.shops
station.shops.build
class Station < ActiveRecord::Base
    has_many :shops, :dependent => "nullify"
end