0

我有两个模型:

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

4

2 回答 2

0

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

于 2013-06-13T14:31:10.883 回答
0

这是它应该的方式。来自Rails 文档

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

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

当您搜索时,rails 在幕后user.address所做的是搜索与当前 id 相等Address的。user_iduser

就像是:

Select * From addresses where user_id = <current_user>.id
于 2013-06-13T14:34:04.770 回答