Rails,链接两个模型并创建一个又一个模型的最佳方法是什么

时间:2013-06-10 15:35:41

标签: ruby-on-rails models relationship

我有两种模式:

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模型上。我不想在创建用户后更新地址。也许我不是以铁路方式做事?

1 个答案:

答案 0 :(得分:0)

  

但是当我创建User时,它会保存地址,但是user_id没有显示在Address模型上。

原因是您创建新地址的方式不正确。

构建新地址实例的正确方法是关联模型用户。

@address = @user.address.new("some params")
@address.save

通过这种方式,实例address将自动包含user_id

还有两件事:

  1. 如果该方法不会复制generate_newsave的功能,则不需要其他create方法。

  2. 您可以选择在地址模型中验证user_id的存在,以确保在创建Address对象之前user_id始终有效。这是可选的,因为您也可以按上述方式确保这一点

    class Address < ActiveRecord::Base
      belongs_to :user
      validates_associated :user
    end