Rails:自引用 has_many 模型如何工作?

17

所以,我正在开发一个应用程序,希望用户能够将对象分组到“文件夹”中。基本上:

User has_many :foos

Foos不一定要在文件夹中,但它们可以在其中。在这种情况下:

Folder has_many :foosFoo belongs_to :folder

现在,我想设置文件夹,使它们可以嵌套。我认为这类似于...

Folder has_many :folders

我听说这种自引用关系并不是什么大问题,但我真的不知道它是如何工作的。我还没有弄清楚这应该在模型中如何声明以及需要在数据库中提供哪些列。

有人能提供一个例子吗?我也很重视任何关于在应用程序中设置这种关系的建议/提示/警告/经验教训。

谢谢!

1个回答

34

请查看coreyward在此问题中的回答:创建具有树形结构的模型

基本上,您需要向文件夹表添加一个"parent_id"字段,并在Folder模型中设置一个关系,如下:

belongs_to :parent, :class_name => "Folder"
has_many :folders, :foreign_key => "parent_id"

1
我相当确定在belongs_to行上不需要:foreign_key => "parent_id"。它只应该在has_many行上,是吗? - 3nafish
1
如果你想给子关系取一个别的名字,比如 children_folders,那么你需要指定类名:has_many :children_folders, :foreign_key => "parent_id", :class_name => "Folder" - AJP
还有一个混合的情况怎么办?例如:all_folders,我们该怎么做? - Mauro Dias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接