2

我有两个模型:

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_id。创建用户后我不想更新地址。也许我做的不是轨道方式?

4

1 回答 1

0

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

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

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

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

这样实例address就会user_id自动在里面了。

还有两件事:

  1. generate_new如果该方法只是复制 , 的功能,则save不需要其他方法create

  2. 或者,您可以在 Address 模型中验证 user_id 的存在,以确保 user_id 在创建 Address 对象之前始终有效。它是可选的,因为您也可以如上所述确保这一点

    class Address < ActiveRecord::Base
      belongs_to :user
      validates_associated :user
    end
    
于 2013-06-10T16:27:45.803 回答