1

在以下表格关系的模型中实现关联的最佳方法是什么。

当前细节/目标

  • 保持表结构相同,因为它是一个遗留数据库。
  • 我想一举保存User他们的选项。primary address
  • userstable 有一个primaryaddressid指向 a 的列user_addressesaddressid桌子。
  • user_addresses表有一个userid指向的外键usersuserid

这是我到目前为止所拥有的。

# User model class associations
has_many :user_addresses, :foreign_key => "userid", :autosave => true
belongs_to :primary_address, :class_name => "UserAddress", :foreign_key => "primaryaddressid", :autosave => true

我希望能够有选择地创建具有主要地址的用户,例如......

User.new
User.primary_address.build(:street => 'dfkslf', :street2 => 'dfjkslfjlks231', etc)
User.save

然后,这将保存记录并自动更新 User 表的 primaryaddressid。

问题...

我在想我的主要选项是创建一个after_save验证是否primaryaddressid有值,如果没有,则查找在user_addresses给定的情况下插入的最新地址userid并将其添加addressid到用户并更新它。

处理这种情况的最佳方法是什么,以使我在添加用户时具有最大的灵活性并且对性能的影响最小?

4

1 回答 1

1

所以我找到了让我有些满意的解决方案。

在我的UserAddress模型中,我添加了:

attr_writer :is_primary
attr_reader :is_primary

after_save :update_primaryid

def set_as_primary!
  self.is_primary = true
end

def update_primaryid
  if self.is_primary
     user = User.find_by_personid(self.personid)
     user.primaryaddressid = self.addressid
     user.save!
  end
end

这让我可以自由地做:

useraddress = user.user_addresses.build(personAddr)
useraddress.set_as_primary!

user.save!
于 2013-03-14T16:21:26.473 回答