如何添加一列以引用RoR上的另一个表?
问题描述:
这里是客户:如何添加一列以引用RoR上的另一个表?
class CreateCustomer < ActiveRecord::Migration
def self.up
create_table :customers do |t|
t.column :email, :string, :null => false
end
end
def self.down
drop_table :customers
end
end
这是客户信息:
class CustomerInfo < ActiveRecord::Migration
def self.up
create_table :statuses do |t|
t.column :statuses, :string, :null => false
end
end
def self.down
drop_table :status
end
end
我想要做的是客户和客户信息有一一对应的关系。我如何在新迁移中完成此操作?谢谢。
答
当您想在Rails中使用1对1时,您必须决定哪个模型将存储外键。在你的情况下,你可能需要状态来存储fk,所以在状态表中添加一个名为customer_id
的整数列。然后,您可以在Customer和Status上添加has_one
/belongs_to
。 belongs_to
总是与外键一起进入模型。
而且我不知道,如果Rails会喜欢你和奇异对骂你的表,那么你可能会做一些额外的工作,如果你真的想调用它,而不是“状态”
“状态”
答
你可以尝试在你的下一个迁移之后的事情
add_column:CUSTOMER_INFOS,:CUSTOMER_ID,:整数:引用=> “客户”:空=>:真
然后你就可以添加HAS_ONE/belongs_to在Customer和Cusomer_infos上。
您还可以执行SQL语句。
声明= “ALTER TABLE用户更改ID号SMALLINT(5)UNSIGNED NOT NULL AUTO_INCREMENT” 的ActiveRecord :: Base.connection.execute(声明)
您可以手动条目迁移
注意这只是一个例子。最终的SQL语句语法取决于数据库。
因此,我不需要在我的迁移中添加额外的代码?只要去模型,并设置has_one和belongs_to关系,所有的魔法将起作用? – Tattat 2010-07-11 07:40:47
你需要在迁移中添加外键(customer_id),但在此之后,是的,只是has_one/belongs_to是它 – x1a4 2010-07-11 07:46:12