为什么has_one关联中的父模型具有foreign_key = nil

时间:2013-06-13 14:19:45

标签: 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

class Address < ActiveRecord::Base
  belongs_to :user

  def self.generate_new
    new_address = # some code generating UUID

    Address.create!({address: new_address})
  end
end

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

2 个答案:

答案 0 :(得分:0)

为什么在用户模型中有address_id列?对于关联来说,在地址表上使用user_id就足够了。

答案 1 :(得分:0)

这是应该的方式。来自Rails Doc

  

区别在于您放置外键的位置(它出现在声明belongs_to关联的类的表中)

这意味着,由于您的Address模型声明了belongs_to,因此应该放置外键。

当您搜索user.address时,幕后的跟踪功能是搜索Address,其user_id等于当前user的ID。

类似的东西:

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