Ruby on rails 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
站
类和一个商店
类。我只是想让商店有一个车站,代表最近的火车站,所以我想这将是一个多对一的关系
如果没有任何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