Rails模型关联



我很难在Rails应用程序中概念化一种在两个不同模型之间创建关联的好方法。

目前,我有一个个人模型和一个模式。一个人可以是笔记的作者或主题。因此:

  • 一个可以属于许多音符(作为主体)
  • 一个可以有许多笔记(作为作者)
  • 注释属于一个作者(个人)
  • 笔记可以有一个主题(个人)

我认为应用程序需要显示个人配置文件,在其中我们可以看到人员编写的所有笔记,以及关于所有笔记。

建立这个模型关联的最佳方式是什么?直接还是通过中间关系模型?

提前感谢!

在我看来,最干净的方法是让一个笔记属于一个作者和一个主题:

class Note < ActiveRecord::base
belongs_to :author, class_name: 'Person', foreign_key: :author_id
belongs_to :subject, class_name: 'Person', foreign_key: :subject_id
end
class Person < ActiveRecord::base
has_many :authored_notes, class_name: 'Note', foreign_key: :author_id
has_many :notes_about_me, class_name: 'Note', foreign_key: :subject_id
end

你可能想更改上面关系的名称,但你已经明白了。

我知道我们通常不会认为关于某人的笔记属于笔记的主题。但是,从Rails的角度来看,belongs_to关系允许我们将subject_id外键放置在notes表上,这是最简单的解决方案。如果要使用has_one关系,则必须创建一个联接表,在我看来,这会增加不必要的复杂性。

确保您的notes表有两个对persons表的索引引用,分别称为subject_idauthor_id。你可以通过这样的迁移来做到这一点:

class AddSubjectAndAuthorToNotes < ActiveRecord::Migration
def change
add_reference :notes, :author, index: true
add_reference :notes, :subject, index: true
add_foreign_key :notes, :people, column: :author_id
add_foreign_key :notes, :people, column: :subject_id
end
end

相关内容

  • 没有找到相关文章

最新更新