添加对不同于 id 的所选列的引用
Posted
技术标签:
【中文标题】添加对不同于 id 的所选列的引用【英文标题】:Add references to a chosen column different from id 【发布时间】:2016-08-28 09:44:46 【问题描述】:是否可以添加对不同于id
列的列的引用?
通常在创建两个模型(Model1 和 Model2)之间的关系时,使用 model1:references
和 model2:references
来创建关系模型会自动添加 model1_id
和 model2_id
列(以及索引和外键引用)用于模型 1/模型 2 关联:
rails generate Relationship model1:references model2:references
例如Model1 = Teacher
和Model2 = Pupil
。
假设 Model2 的记录(学生的记录)不时通过 rake 任务更新:它的属性值(例如 name
和 school_credits
)会改变,保留 id
和 ranking
(1 到100)。
将教师与pupil_id
关联起来没有多大意义。
每位教师应与其学生姓名相关联,使用属性pupil.name
而不是pupil.id
作为外键引用。
这可能吗?
我可以在命令rails generate Relationship
中添加哪些选项,或者我应该添加什么reference 以获得此结果?
【问题讨论】:
如果你将 Pupil 与一个名字关联起来,而小学生的名字发生了变化,你将如何确定关联? 说 id 1 rank 1 是 Paul 有 100 个学分,1d 2 rank 2 是 Kevin 有 90 个学分,id 3 rank 3 是 Lea 有 80 个学分。如果 Lea 获得 30 积分 id 1 排名 1 更新为 Lea 名称和 110 积分。保罗和凯文也变了。如果 Lea 是 teacher1 的学生,teacher1 应该与 Lea 关联,而不是与 id 3 关联。 【参考方案1】:是的,你可以。检查以下link 中有关foreign_key 和primary_key 的部分。我不使用生成器,因此我无法评论将哪些选项传递给生成器,但您只需要确保要用作外键的列存在于您的表中,并且您在模型文件中分配了适当的外键。
但是你为什么需要它?我不明白您可能有什么样的用例需要您保持 id 和排名相同。
【讨论】:
以Wta排名(女子网球)为例。它们每周都会更新。您可以使用 nokogiri 更新名称和积分以寻找排名。很难追踪排在 100 名以外的网球运动员(即从前 100 名退出的网球运动员)。以上是关于添加对不同于 id 的所选列的引用的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server WITH ROLLUPWITH CUBEGROUPING语句的应用