0

我在 ruby​​ 中使用迁移来创建这些表和模型。

我有一个表信息和一个表详细信息,信息表中的每个条目在详细信息表中可以有一个关联。

所以我创建了它们:

create_table :details do |t|
      t.integer :id
      t.string :Bezeichnung
      t.binary :Koordinaten
    end

 create_table :informations do |t|
      t.integer :id
      t.integer :DetailID
      t.integer :Longitude
      t.integer :Latitude
    end

在我的信息表中,我得到了一个 DetailID,它应该引用 Detail 表的 id。

现在我做了:

ALTER TABLE informations
      ADD CONSTRAINT fk_informations_details
      FOREIGN KEY (DetailID)
      REFERENCES details(id)

它是否正确?我是否正确设置了 FOREIGN KEY?还是我必须将外键放在另一个表中!?

因为我想在我的信息模型中使用以下:

has_one :detail, :foreign_key => 'DetailID'

在详细模型中:

belongs_to :main
4

1 回答 1

2

一些注意事项:

  1. 使用迁移对数据库执行各种更改,切勿手动进行。
  2. 尽可能使用 Ruby on Rails 命名约定。这意味着使用detail_id而不是DetailID
  3. 你的联想是错误的。

如果,Ruby on Rails 将在表中Information has_one :detail查找具有匹配项的实体。information_iddetails

在您的模型中,情况正好相反 -Information包含一个detail_id. 换句话说,Ruby on Rails 会将其指定为Information belongs_to :detailand Detail has_one :information

于 2012-11-03T14:00:48.670 回答