1

在下面的示例中,我必须employee_id在 Office 模型中创建,还是由 自动创建db:migrate

class Employee < ActiveRecord::Base
  has_one :office
end

class Office < ActiveRecord::Base
  belongs_to :employee    # foreign key - employee_id
end

感觉就像我错过了一些基本的东西。我正在尝试使基本的一对多关系正常工作,我可以在其中使用从一侧下拉选择的对象。有没有什么好的基本教程来解释它是如何工作的?

我必须在我希望它工作的所有模型中创建_ids ,但从我看过的示例中它似乎并不正确。

4

2 回答 2

2

两个步骤。

首先,您必须在迁移文件的 office 表中创建一个employee_id 字段。你会有类似的东西:

class CreateOffices < ActiveRecord::Migration
  def change
    create_table :offices do |t|
      t.string :name
      t.integer :employee_id

      t.timestamps
    end
  end
end

其次,您必须在模型中定义关联。按照惯例,如果您将 foreign_key 字段命名为employee_id,则不必在模型中指定它的名称。

class Office < ActiveRecord::Base
  belongs_to :employee
end

应该足够了。

于 2013-09-16T04:16:37.043 回答
2

ActiveRecord 中的关联包括两部分。将模型对象连接在一起(就像您所做的那样)并设置数据库。因此,您需要在迁移中定义关联,如下所示:

def change
  create_table :offices do |t|
    # Other migrations

    t.references :employee
  end
end

或者,您也可以这样做t.integer :employee_id也能达到同样的目的。

于 2013-09-15T23:53:57.047 回答