Ruby on rails 为什么一个关联中的父模型具有外键=nil

Ruby on rails 为什么一个关联中的父模型具有外键=nil,ruby-on-rails,associations,has-one,Ruby On Rails,Associations,Has One,我有两种型号: class User < ActiveRecord::Base before_create :add_address has_one :address def add_address self.address_id ||= Address.generate_new.id end end 及 当我创建User.new时,它创建地址关联并保存,我可以使用User.address获取它,并且mysql地址行中的User\u id正确,但mysql中的

我有两种型号:

class User < ActiveRecord::Base
  before_create :add_address
  has_one :address


  def add_address
    self.address_id ||= Address.generate_new.id
  end
end


当我创建User.new时,它创建地址关联并保存,我可以使用User.address获取它,并且mysql地址行中的User\u id正确,但mysql中的User具有address\u id=nil。我做错了什么?我尝试了User.new\User.build\u address创建和保存地址的两种方式,但用户总是有address\u id=nil

为什么在用户模型中有address\u id列?关联在地址表上有用户id就足够了。

这是应该的方式。从

区别在于您将外键放在表中的位置,该外键用于声明“属于”关联的类

这意味着,由于您的地址模型声明了所属的,所以应该将外键放置在该位置

rails在后台搜索user.address时所做的是搜索用户id等于当前用户id的地址

比如:

Select * From addresses where user_id = <current_user>.id
Select * From addresses where user_id = <current_user>.id