未创建外键列(我使用的是has_one:用户模型中的详细信息和belongs_to:详细信息模型中的用户)

时间:2013-10-16 12:25:20

标签: ruby-on-rails-3.2

class Details < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_one :details
end

我期待user_id作为详细信息表中的外键列,但没有创建任何解决方案?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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

查看has_one associationRails GuidesRails API docs创建的所有方法。