【问题标题】:Does a model have to be linked to another model or can it be linked to a table based on the same model?一个模型必须链接到另一个模型还是可以链接到基于相同模型的表?
【发布时间】:2021-09-02 14:16:16
【问题描述】:

我正在尝试调试在 RoR 上运行的大型应用程序。在我的模型Text 我有这个关系:

has_many :copies, :foreign_key => :original_id

这是否意味着我的应用程序中必须有另一个名为 Copie 的模型(应该是 Copy...),它通过 foreign_key 链接到它,或者它可能只是指向另一个使用相同模型的表的链接Text?

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    在大多数情况下,是的。会有一个Copy 模型。不过,您可以使用 class_name 选项将其指向不同的模型

    通常,如果它引用了不同的表,则会使用 class_name 关键字。例如:has_many :copies, :class_name => 'YourOtherModel', :foreign_key => :original_id

    按照惯例,Rails 假定用于保存另一个模型上的外键的列是该模型的名称,并添加了后缀 _id。

    Rails 确实为您提供了直接设置 :foreign_key 选项的能力:

    参见文档here

    您还可以设计一个必须与自身相关的数据模型:

    参见文档here

    我希望这能为您提供一些见解以进一步调查

    【讨论】:

    • 实际上我的模型关系中有这个:class_name => "Text"。出于某种原因,我认为这无关紧要......所以我有has_many :copies, :foreign_key => :original_id, :class_name => "Text"
    • 所以copies 将使用'original_id' 作为外键引用Text
    • @Maxime 如果您觉得这个答案很有用,请考虑支持它
    • 我还不能投票,因为我的声望只有 9... 但我会尽快,你的回答确实很有用。
    • 很高兴它有帮助。你应该能够接受答案
    猜你喜欢
    • 1970-01-01
    • 2017-11-21
    • 2016-02-24
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多