【问题标题】:What is the correct Rails association for this design?此设计的正确 Rails 关联是什么?
【发布时间】:2014-04-22 21:51:34
【问题描述】:

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

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

这类似于一个大型图书馆系统,其中书籍可能位于几栋建筑中的一栋中,并且顾客可以从每栋建筑中查阅书籍。在任何时候,我都想在大楼里或在赞助人那里找到一本书。

我的困惑主要源于这样一个事实,即该项目会在不同的时间点与两个不同模型中的任何一个相关联。它可能在某个位置,也可能由用户持有,但绝不应该两者兼而有之。

什么关联或设计会为此工作?谢谢……

【问题讨论】:

  • 我完全不同意保留这个。这是非常具体的。我唯一没有包括的是模型/迁移代码,因为我正在做设计,所以没有编写。请立即解除暂停,因为我需要建议。
  • 我还可以指出一个非常相似的问题列表,这些问题在这个论坛中被允许和回答。
  • 我大概可以回答这个问题,放下它,我会试一试
  • 你可以检查 Rails 的多态关联
  • 多态看起来是正确的,如果他打开它以便可以适当地回答它。因为,你会认为一个可以回答得这么清楚的问题也一定写得很清楚。

标签: ruby-on-rails ruby activerecord


【解决方案1】:

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

项目.rb

  belongs_to :check_outer, :polymorphic => true

用户.rb

  has_many :items, :as => :check_outer

位置.rb

  has_many :items, :as => :check_outer

您将需要适当的数据库列来支持这一点。

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

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

【讨论】:

  • 我可能只会补充一点,如果您希望能够按要求确定位置,则在项目定义中需要外键列和类型列。这将允许@item.check_outer 得到解决,这是我需要的。
  • 谢谢 R_G 我忘了补充你需要必要的迁移,我会编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
相关资源
最近更新 更多