【问题标题】:Rails: How do self-referential has_many models work?Rails:自引用 has_many 模型如何工作?
【发布时间】:2011-07-03 20:27:42
【问题描述】:

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

User has_many :foos

Foos 不必在文件夹中,但可以。在这种情况下:

Folder has_many :foosFoo belongs_to :folder

现在,我希望能够设置文件夹以便它们可以嵌套。我觉得这有点像……

Folder has_many :folders

我听说这种自我参照关系没什么大不了的,但我真的不明白它是如何工作的。我无法弄清楚这应该如何在模型中声明以及我需要在数据库中提供哪些列。

谁能举个例子?我也很重视任何建议/提醒/警告/经验教训,您可以提供有关在应用程序中建立这种关系的建议。

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord model self-join


    【解决方案1】:

    在此处查看 coreyward 对问题的回答:Creating a model that has a tree structure

    基本上你想在你的文件夹表中添加一个“parent_id”字段,然后像这样在你的文件夹模型中建立一个关系:

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

    【讨论】:

    • 我很确定您不需要 belongs_to 行上的 :foreign_key => "parent_id"。它应该只在 has_many 行,是吗?
    • 如果您想将子关系命名为其他名称,例如children_folders 那么你需要指定class_name:has_many :children_folders, :foreign_key => "parent_id", :class_name => "Folder"
    • 那么混合呢?比如 :all_folders 我们怎么办?
    猜你喜欢
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多