【发布时间】:2019-03-09 20:40:08
【问题描述】:
所以这或多或少是我正在尝试的:
我为所有常见功能提取了一个抽象类,其中包括一个多态关联,所以它看起来像这样:
class Card < ActiveRecord::Base
self.abstract_class = true
belongs_to :cardable, polymorphic: true
...
end
class Spell < Card
...
end
class Unit < Card
...
end
现在,当我尝试对此使用多态关联时,如下所示:
class Deck < ActiveRecord::Base
has_many :cards, :as => :cardable
end
class Hand < ActiveRecord::Base
has_many :cards, :as => :cardable
end
belongs_to 部分工作正常,
即spell.cardable 按预期完美运行
但是,由于是抽象类,has_many 不能正常工作
即 hand.cards 或 deck.cards 总是给出一个空的 ActiveRecord 关联
这是一个可行的模型,或者如果不是,那么对整个场景建模的更好方法是什么?
【问题讨论】:
-
你为什么认为你应该首先在这里使用抽象类?没有更多信息,很难知道为什么或您在这里尝试做什么,因此无法提供答案。在 Rails 中使用模型并不是最佳实践。看这篇文章medium.com/@jeremy_96642/…
-
我不知道 Ruby 中“抽象类”的概念。你能定义一下这个词吗?
-
@lacostenycoder 这是因为两个子类的行为非常相似;但是他们在架构上的差异迫使我不使用 STI
-
@CarySwoveland 抽象类是 rails 中的一个概念,其中:如果将类标记为抽象类,则它不需要相应的表(在较新的 rails 版本中,自动生成的
ApplicationRecord类就是一个示例一样的)。然后您可以将其用作父类进行继承,其中每个子类将需要不同的表。 -
乔希,感谢您的解释。
标签: ruby-on-rails ruby associations polymorphic-associations