Rails中的关系数据库:我需要多少个引用?

时间:2015-08-01 09:35:29

标签: ruby-on-rails ruby-on-rails-4 database-schema foreign-key-relationship

在我的rails应用程序中,一个人has_many:测量和一个Measurement belongs_to a:person。 我将关联添加到模型文件中。然后我为这个关联编写了两个迁移。

class AddMeasurementRefToPeople < ActiveRecord::Migration
  def change
    add_reference :people, :measurement, index: true, foreign_key: true
  end
end

class AddPersonRefToMeasurements < ActiveRecord::Migration
  def change
    add_reference :measurements, :person, index: true, foreign_key: true
  end
end

我的schema.rb看起来像这样:

ActiveRecord::Schema.define(version: 20150730121109) do

  create_table "measurements", force: :cascade do |t|
    t.datetime "date"
    t.integer  "weight"
    t.integer  "bmi_calc"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer  "person_id"
  end

  add_index "measurements", ["person_id"], name: "index_measurements_on_person_id"

  create_table "people", force: :cascade do |t|
    t.string   "name"
    t.float    "length"
    t.datetime "created_at",     null: false
    t.datetime "updated_at",     null: false
    t.integer  "measurement_id"
  end
add_index "people", ["measurement_id"], name: "index_people_on_measurement_id"

end

现在我怀疑是否确实需要两个迁移。现在,我在两个模型中都有一个foreign_key。一个人不够吗? (如果是这样,我应该回滚两次迁移中的哪一次?)

1 个答案:

答案 0 :(得分:2)

根据您的协会,一个人有很多测量,测量仅属于人。

您只需要在测量表中输入外键。无需将.env添加到人,因为一个人有很多测量值。

所以measurement_id就足够了

你应该做的模特

AddPersonRefToMeasurements