我正在做我的第一个 rails(3) 应用程序。
协会没有意义。首先,即使是导轨指南也没有真正解释它们的作用,它们只是解释了如何使用它们。据我所知,协会做了两件事:
a) Allow ActiveRecord to optimize the structure of the database.
b) Allow ActiveRecord to offer an alternate ruby syntax for
joins and the like (SQL queries). I want this.
我正在尝试了解关联,以及如何正确使用它们。根据下面的示例,似乎关联已“损坏”,或者至少文档已损坏。
考虑我的应用程序的一个简单版本。一位老师修改单词表以供学习。
本次讨论有 3 个相关表格。为清楚起见,我只是简单地包含了 annotate(1) 工具对表的定义,并删除了不必要的字段/列。
词表管理表:
Table name: wordlist_mgmnt_records
id :integer not null, primary key
byline_id :integer(8) not null
将单词映射到单词列表的表:
Table name: wordlists
wordlist_mgmnt_id :integer not null
word_id :integer not null
我们实际上并不关心单词本身。但我们确实关心最后一张表,即署名:
Table name: bylines
id :integer(8) not null, primary key
teacher_id :integer not null
comment :text not null
署名记录谁,使用什么工具,在哪里,何时等。署名主要用于解决发生的事情,以便我可以向用户解释他们应该做什么(和/或修复他们的错误)。
教师可以一次修改一个或多个单词列表管理记录(也称为单个署名)。换句话说,一次更改可能会更新多个单词列表。
对于 wordlist_mgmnt_records 关联将是:
has_many :bylines # the same byline id can exist
# in many wordlist_mgmnt_records
但是署名的相应条目是什么?
《Beginning Rails 3》(Carneiro 等人)一书说:
"Note: For has_one and has_many associations, adding a belongs_to
on the other side of the association is always recommended. The
rule of thumb is that the belongs_to declaration always goes in
the class with the foreign key."
[ 是的,我也为此查看了在线导轨指南。没有帮助。]
对于署名表/课程,我真的想说吗?
belongs_to :wordlist_mgmnt_records
这真的没有意义。bylines 表基本上属于数据库中具有 bylines_id 的每个表。那么我真的会说属于他们所有人吗?那不会在所有其他表中设置外键吗?这反过来又会使更改比我真正想要的更昂贵(太多的 CPU 周期)。一些变化影响了很多表,其中一些非常大。我重视正常使用的速度,并且愿意等待在使用署名进行清理/修复时找到没有外键的署名。
这给我们带来了完整的循环。关联在 Rails 中的真正作用是什么,如何巧妙地使用它们?
仅仅因为你可以使用关联似乎不是正确的答案,但是你如何获得添加的连接语法呢?