如何添加一列以引用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_tobelongs_to总是与外键一起进入模型。

而且我不知道,如果Rails会喜欢你和奇异对骂你的表,那么你可能会做一些额外的工作,如果你真的想调用它,而不是“状态”

“状态”
+0

因此,我不需要在我的迁移中添加额外的代码?只要去模型,并设置has_one和belongs_to关系,所有的魔法将起作用? – Tattat 2010-07-11 07:40:47

+0

你需要在迁移中添加外键(customer_id),但在此之后,是的,只是has_one/belongs_to是它 – x1a4 2010-07-11 07:46:12

你可以尝试在你的下一个迁移之后的事情

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语句语法取决于数据库。