4

我可以轻松地在 Rails 中创建一个脚手架或模型,其字段是另一个模型的引用(外键):

rails g model Cat owner:references
rails g scaffold Cat owner:references

但我似乎无法在迁移中添加列:

rails g migration AddOwnerToCats owner:references

上面所做的是生成一个像这样的迁移文件:

class AddOwnerToCats < ActiveRecord::Migration
  def change
    add_column :cats, :owner, :references
  end
end

当我尝试使用它运行它时rake db:migrate,我得到了这个:

SQLite3::SQLException: near "references": syntax error: ALTER TABLE "cats" ADD "owner" references

那么有没有办法添加一个引用另一个模型的列?还是我只需要这样做:

rails g migration AddOwnerToCats owner_id:integer

然后进入迁移并为owner_id?

4

2 回答 2

0

我能想到的一种解决方法是,简单地创建列,并在模型中给出连接条件。IE

has_many :x, :class_name => y, :foreign_key => z
于 2013-09-04T18:30:23.977 回答
0

我知道这是一个老问题,但从 Rails 5(可能还有更早的版本)开始,官方文档已经更新:

rails generate migration AddOwnerRefToCats owner:references

会产生

class AddOwnerRefToCats < ActiveRecord::Migration[5.0]
  def change
    add_reference :cats, :owner, foreign_key: true
  end
end

您还可以添加, index: true创建索引。

于 2017-06-26T11:15:54.693 回答