如何添加列以引用RoR上的另一个表?

时间:2010-07-11 07:14:47

标签: ruby-on-rails migration

以下是客户:

   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

我想做的是客户和客户信息有一对一的关系。如何在新的迁移中执行此操作?谢谢。

2 个答案:

答案 0 :(得分:0)

当你想在Rails中使用1比1时,你必须决定哪个模型将存储外键。在您的情况下,您可能希望状态存储fk,因此将名为customer_id的整数列添加到状态表中。然后,您可以在客户和状态上添加has_one / belongs_tobelongs_to总是使用外键进入模型。

另外我不确定Rails是否会喜欢用单数名称来调用你的表格,所以你可能需要做一些额外的工作,如果你真的想把它称为'状态'而不是'状态'

答案 1 :(得分:0)

您可以在下次迁移中尝试关注事物

add_column:customer_infos,:customer_id,:integer,:references =&gt;“customers”,:null =&gt;:true

然后你可以在Customer和Cusomer_infos上添加has_one / belongs_to。

您也可以执行SQL语句。

statement =“ALTER TABLE users CHANGE id id SMALLINT(5)UNSIGNED NOT NULL AUTO_INCREMENT”ActiveRecord :: Base.connection.execute(statement)

您可以在迁移中手动输入

请注意,这只是一个例子。最终的SQL语句语法取决于数据库。