这个设计的正确Rails关联是什么?

时间:2014-04-22 21:51:35

标签: ruby-on-rails ruby activerecord

环境:Ruby 2.0.0,Rails 4.1,Windows 8.1,Devise

我对如何处理这个问题很困惑。我有一些项目存储在某个位置,直到用户签出它们为止。我希望能够查询该项目并确定当前持有它的位置或用户。因此,该项目将属于某个位置或用户。每个位置和每个用户可以有许多项目。

这就像一个大型图书馆系统,书中的书可能位于几栋建筑物之一,顾客可以查看每栋建筑物的书籍。在任何时候,我都希望在建筑物中或与赞助人一起找到一本书。

我的困惑主要源于这样一个事实,即该物品将在不同时间点与两种不同模型中的任何一种相关联。它可能位于某个位置,也可能由用户持有,而且不应该同时存在。

哪种关联或设计适用于此?谢谢......

1 个答案:

答案 0 :(得分:1)

我会使用多态关联,尝试这样的事情:

item.rb的

  belongs_to :check_outer, :polymorphic => true

User.rb

  has_many :items, :as => :check_outer

Location.rb

  has_many :items, :as => :check_outer

您需要适当的数据库列才能支持此功能。

  • items表格中,添加check_outer_type:stringcheck_outer_id:int

有关多态关联的更多信息,请查看:http://guides.rubyonrails.org/association_basics.html#polymorphic-associations