【问题标题】:Ruby on Rails - Foreign key to reference index other than primary keyRuby on Rails - 引用索引而非主键的外键
【发布时间】:2014-06-20 00:12:57
【问题描述】:

在 Ruby on Rails 中,如何创建关系,其中外键引用字段而不是主键?如何在迁移或模型类中做到这一点?我正在使用 MySQL。

谢谢,

编辑:假设我有两个表 A 和 B。在 B 中,我有一个名为 name 的字段,在 A 中我有 b_name。我该如何指定

【问题讨论】:

  • 您想要自定义foreign key
  • 我用一个例子更新了我的问题
  • 如果我没记错的话,所有示例都告诉我如何将 b_name 指定为外键。如何让 ruby​​ 引用 name 而不是主键。是通过指定 :reference => 'b_name' 吗?
  • 就这么简单。在 A 中,您可以指定 foreign_key: 'b_name' 就是这样。
  • ruby 怎么知道 b_name 附加到 name 而不是 Model B 的主键:s

标签: mysql ruby-on-rails foreign-key-relationship


【解决方案1】:

您可以像这样在表中设置作为外键的列名:

Class ModelA  < ActiveRecord::Base
    has_many :models, foreign_key: 'another_id'

上面的关联说,models 表有一个名为“another_id”的列。

阅读更多关于各种选项in the docs

【讨论】:

    【解决方案2】:

    foreign_key arg 是您所需要的,正如 pavanemaillenin 所提到的,但是,我想强调的是,为了让它工作,我发现您必须将它应用于协会的两个部分:

    #app/models/user.rb
    Class User < ActiveRecord::Base
        has_many :posts, foreign_key: "post"
    end
    
    #app/models/post.rb
    Class Post < ActiveRecord::Base
        belongs_to :user, foreign_key: "post"
    end
    

    要在迁移/数据库中引用,您只需将____id 列替换为另一列。仍然是一个整数等,除了它会有不同的名称

    【讨论】:

    • 你长得很好!我在这里看到你很多 - 很高兴看到你勇敢地接受了很多人喜欢给予的反对票!
    • 非常感谢哥们:)
    【解决方案3】:

    您可以通过Model 级别中的foreign_key 选项进行设置

    class A < ActiveRecord::Base
    
      belongs_to :B, foreign_key: 'some_other_column'
    
    end
    

    如果您没有指定foreign_key 选项,Rails 默认会查找B_id

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 2018-10-02
      相关资源
      最近更新 更多