我有两种模式:
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
答案 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