添加对不同于 id 的所选列的引用

Posted

技术标签:

【中文标题】添加对不同于 id 的所选列的引用【英文标题】:Add references to a chosen column different from id 【发布时间】:2016-08-28 09:44:46 【问题描述】:

是否可以添加对不同于id 列的列的引用?

通常在创建两个模型(Model1 和 Model2)之间的关系时,使用 model1:referencesmodel2:references 来创建关系模型会自动添加 model1_idmodel2_id 列(以及索引和外键引用)用于模型 1/模型 2 关联:

rails generate Relationship model1:references model2:references

例如Model1 = TeacherModel2 = Pupil。 假设 Model2 的记录(学生的记录)不时通过 rake 任务更新:它的属性值(例如 nameschool_credits)会改变,保留 idranking(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 的所选列的引用的主要内容,如果未能解决你的问题,请参考以下文章

根据所选列中的文本调整行高

如何根据所选列而不是Oracle中表的所有列获取不同的行

SQL Server WITH ROLLUPWITH CUBEGROUPING语句的应用

SQL Server WITH ROLLUPWITH CUBEGROUPING语句的应用

DT::datatable – 格式化所选列?

抓取TreeView所选节点的位置