0
class Details < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_one :details
end

我期待 user_id 作为详细信息表中的外键列但未创建,有什么解决方案吗?

4

2 回答 2

0

您必须自己创建它,rails 不会自动创建它。尝试像这样运行迁移:-

class AddUserIdToDetais < ActiveRecord::Migration
  def change
    add_column :details, :user_id, :integer
  end
end
于 2013-10-16T13:43:25.490 回答
0

外键始终在belongs_to关联的表/模型上。您需要通过创建迁移手动添加外键列。

$ rails g migration add_user_id_to_details user:references

这将导致这样的迁移:

class AddUserIdToDetais < ActiveRecord::Migration
  def change
    add_reference :details, :user
  end
end

这相当于:

class AddUserIdToDetais < ActiveRecord::Migration
  def change
    add_column :details, :user_id, :integer
  end
end

根据您的查询,您应该考虑添加索引(参考迁移应该自动建议)以提高查询性能。

更新:与协会合作

当一切设置正确后,您可以通过用户记录创建详细记录以user_id自动设置。

user = User.first
user.create_details(name: 'blub') # the create_association method is generated for a has_one association

在Rails 指南Rails API 文档中查看has_one关联创建的所有方法。

于 2013-10-16T14:07:37.897 回答