我有两种模式:
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时,它会保存地址,但是user_id没有显示在Address模型上。我不想在创建用户后更新地址。也许我不是以铁路方式做事?
答案 0 :(得分:0)
但是当我创建User时,它会保存地址,但是user_id没有显示在Address模型上。
原因是您创建新地址的方式不正确。
构建新地址实例的正确方法是至关联模型用户。
@address = @user.address.new("some params")
@address.save
通过这种方式,实例address
将自动包含user_id
。
还有两件事:
如果该方法不会复制generate_new
,save
的功能,则不需要其他create
方法。
您可以选择在地址模型中验证user_id的存在,以确保在创建Address对象之前user_id始终有效。这是可选的,因为您也可以按上述方式确保这一点
class Address < ActiveRecord::Base
belongs_to :user
validates_associated :user
end