我开始使用Rails,我对这种关系感到困惑。
问题很简单,我有一个代表火车站的Station
类和一个Shop
类。我只是想让商店有一个车站,代表最近的火车站,所以我想这将是一个多对一的关系。
没有任何ORM,我只需在商店表中添加工作站的外键。在查看了rails关系之后,我最终得到了
class Shop < ActiveRecord::Base
belongs_to :station
end
class Station < ActiveRecord::Base
has_many :shop
end
正确地说,商店并不真正属于我发现这种奇怪的电台,所以我想知道这是否是正确的方式,或者我是否感到困惑。
提前谢谢你。
答案 0 :(得分:1)
belongs_to
和has_many
未描述所涉及对象的所有权或范围或生命周期。它们只描述对象之间的引用(键)。
此类引用的生命周期可以与:dependent,:autosave等选项相关联。 其他选项如:read_only会降低版本从引用到另一个版本的权限。
所有权是您必须自己定义的概念。例如:论坛中的帖子可以“属于”具有不同权限的不同用户。谁是老板?管理员?最后一位编辑?那个创建帖子的人?对于此类行为,需要额外的定义和机制。我建议你看一下CanCan gem(https://github.com/ryanb/cancan)。
答案 1 :(得分:1)
这是正确的方法。 “属于”只是意味着“有一把外键” - 这并不一定意味着这是一种以实际方式描述这种关系的合理方式。
发布后,代码将无法正常工作 - 您需要复数has_many端;即:
class Station < ActiveRecord::Base
has_many :shops
end
您可以通过从应用程序文件夹启动rails控制台('rails c')并尝试创建对象来测试实际关系。假设您已经创建了相应的表,您应该可以执行以下操作:
station = Station.create
shop = Shop.create
shop.station = station
station.shops
station.shops.build
...等
答案 2 :(得分:1)
class Station < ActiveRecord::Base
has_many :shops, :dependent => "nullify"
end
如果您的电台被删除,那么商店将是他们的