Ruby on rails Rails模型关联-有单表继承还是单表继承?

Ruby on rails Rails模型关联-有单表继承还是单表继承?,ruby-on-rails,inheritance,activerecord,model,relationship,Ruby On Rails,Inheritance,Activerecord,Model,Relationship,对于我的两个模型,我很难决定是单表继承还是简单的has_-one关系 背景:我正在创建一个带有“下注”模式的博彩网站。用户可以创建下注,此时将向所有可能接受下注的用户显示(如果他们选择)。下注模型有一个具有三种状态的枚举:已创建、已接受和已完成 现在,我想添加“最喜欢的赌注”的功能。这一点是为了让用户更方便地创建一个赌注,如果他们有他们通常创建的。一次点击而不是十次点击 FavoriteBay仅作为保存的蓝图存在。它们只是赌注的细节——当用户想要创建赌注时,他们可以查看FavoriteWager

对于我的两个模型,我很难决定是单表继承还是简单的has_-one关系

背景:我正在创建一个带有“下注”模式的博彩网站。用户可以创建下注,此时将向所有可能接受下注的用户显示(如果他们选择)。下注模型有一个具有三种状态的枚举:已创建、已接受和已完成

现在,我想添加“最喜欢的赌注”的功能。这一点是为了让用户更方便地创建一个赌注,如果他们有他们通常创建的。一次点击而不是十次点击

FavoriteBay仅作为保存的蓝图存在。它们只是赌注的细节——当用户想要创建赌注时,他们可以查看FavoriteWagers并单击“创建”,这将获取FavoriteWagers的所有字段并与他们一起创建赌注。因此,不同之处在于FavoriteWagers仅作为下注存储,还包括用户指定的名称

我读过STI,似乎很多例子都有多个子类——比如“Vehicle”类的Car、Motorcycle、Boat。然而,我不会有多个子类,只有一个子类(FavoriteWager 另一方面,has_one似乎没有正确地捕捉到这种关系。以下是一个例子:

Class用户结束
为什么不直接执行如下连接表:

Class User < ApplicationRecord
  has_many :favorite_wagers, dependent: :destroy
  has_many :wagers, through: :favorite_wagers
end


Class FavoriteWager < ApplicationRecord
  belongs_to :wager, index: true, foreign_key: true
  belongs_to :user, index: true, foreign_key: true
end

Class Wager < ApplicationRecord
  has_one :favorite_wager, dependent: destroy
  has_one :user, through: :favorite_wager
end
通过这种方式,您可以访问它,如:

some_user.favorite_wagers
=> [#<FavoriteWager:0x00007f9adb0fa2f8...

some_user.favorite_wagers.first.name
=> 'some name'

some_user.wagers.first.amount
=> '$10'

some_user.wagers.first.favorite_wager.name
=> 'some name'
一些用户最喜欢的赌注
=>[#‘某个名字’
一些用户。赌注。第一。金额
=> '$10'
一些\u user.wagers.first.favorite\u wager.name
=>“某个名字”

它返回一个收藏赌注数组。如果你只想每个用户有一个收藏赌注,你可以调整它以限制它。但这使你能够将赌注和用户绑定在一起,作为具有名称属性的收藏。我不太理解你的“活赌注永远没有收藏”用例,但这不重要,你不能弱化此选项以满足您的需要。

为什么不只执行如下连接表:

Class User < ApplicationRecord
  has_many :favorite_wagers, dependent: :destroy
  has_many :wagers, through: :favorite_wagers
end


Class FavoriteWager < ApplicationRecord
  belongs_to :wager, index: true, foreign_key: true
  belongs_to :user, index: true, foreign_key: true
end

Class Wager < ApplicationRecord
  has_one :favorite_wager, dependent: destroy
  has_one :user, through: :favorite_wager
end
通过这种方式,您可以访问它,如:

some_user.favorite_wagers
=> [#<FavoriteWager:0x00007f9adb0fa2f8...

some_user.favorite_wagers.first.name
=> 'some name'

some_user.wagers.first.amount
=> '$10'

some_user.wagers.first.favorite_wager.name
=> 'some name'
一些用户最喜欢的赌注
=>[#‘某个名字’
一些用户。赌注。第一。金额
=> '$10'
一些\u user.wagers.first.favorite\u wager.name
=>“某个名字”

它返回一个收藏赌注数组。如果你只想每个用户有一个收藏赌注,你可以调整它以限制它。但这使你能够将赌注和用户绑定在一起,作为具有名称属性的收藏。我不太理解你的“活赌注永远没有收藏”用例,但这不重要,你不能弱化此项以满足您的需要。

您不能只向模型中添加一个枚举,将其标记为草稿吗?听起来您似乎想得太多了。我认为您的关联是反向的。在我看来,FavoriteWager
属于:wager
并且wager
有一个:favorite\u wager
@hashrocket感谢您的输入。唯一的问题是我有智慧h这是指下注并不总是有最喜欢的下注。大多数情况下不会,因为创建下注时没有保存以备将来使用的意图。例如,用户创建下注,其他用户可以看到并接受。如果用户决定经常创建此下注,则下注可以是最喜欢的下注。如果他们创建最喜欢的下注,则可以st保存赌注的字段,+最爱赌注的名称。然后在创建时,rails将根据保存的详细信息创建一个赌注。这是否澄清了问题?Hi@max我将如何处理最爱赌注的名称?我会将其作为赌注类的可选字段吗?要获得所有用户最爱的赌注,我必须定义一个方法所有的赌注都是“草稿”我想是状态。这感觉很奇怪,因为虽然这两个模型非常相似,但它们仍然是一个单独的概念。如果将来我必须在FavoriteWagers类中添加更多字段会怎么样?似乎会有越来越大的差异,枚举样式不会消除它。如果
有一个
是强制性的,我无法立即回忆起,但是如果是,您可以设置
可选:true
。难道您不能向模型中添加一个枚举,将其标记为草稿吗?听起来您似乎想得太多了。我认为您的关联是反向的。在我看来,FavoriteWager
属于:wager
并且wager
有一个:favorite\u wager
@hashrocket谢谢您的输入。我对此的唯一问题是,下注并不总是有最喜欢的下注。大多数情况下不会,因为它是在不打算保存以供将来使用的情况下创建的。例如,用户创建下注,其他用户可以看到并接受它。如果用户决定经常创建此下注,则下注可以是最喜欢的下注。如果他们创建了favorite_下注,它只保存了一个下注的字段,+一个favorite_下注的名称。然后在创建时,rails将根据这些保存的详细信息创建一个下注。这是否澄清了问题?Hi@max我将如何处理favorite_下注的名称?我会将其作为下注类的可选字段吗?要获得所有用户最喜欢的_下注,我会我们需要定义一种方法,通过“草稿”获得所有赌注我想是状态。这感觉很奇怪,因为虽然这两个模型非常相似,但它们仍然是一个单独的概念。如果将来我必须在FavoriteWagers类中添加更多字段会怎么样?似乎会有越来越大的差异,枚举样式不会消除它。如果
有一个
是强制性的,我无法立即回忆起,但如果是的话,你可以选择