在下面的示例中,我是否必须在Office模型中创建employee_id
,还是由db:migrate
自动创建?
class Employee < ActiveRecord::Base
has_one :office
end
class Office < ActiveRecord::Base
belongs_to :employee # foreign key - employee_id
end
感觉我错过了一些基本的东西。我试图让一个基本的一对多关系工作,我可以从一侧使用下拉选择对象。是否有任何良好的基本技巧解释这是如何工作的?
我必须在我希望它能够工作的所有模型中创建_id
,但从我看过的例子来看,它似乎没有。
答案 0 :(得分:2)
ActiveRecord中的关联包括两部分。将模型对象连接在一起(就像你已经完成的那样)并设置数据库。因此,您需要在迁移中定义关联,如下所示:
def change
create_table :offices do |t|
# Other migrations
t.references :employee
end
end
或者你也可以做t.integer :employee_id
,这也会达到同样的目的。
答案 1 :(得分: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
应该足够了。