在Rails 4中表与自身的关系

时间:2014-09-29 04:39:31

标签: database postgresql activerecord ruby-on-rails-4 one-to-many

请查看附件图片 prize relation

正如您所看到的,PrizePartner和AvailablePartner

之间存在一对多的关系

这是逻辑: 一个奖项合作伙伴可以选择另一个合作伙伴(代表他)

所以可用的合作伙伴将拥有奖品合作伙伴ID和已被选中的其他奖项合作伙伴的ID。

以下是一个例子:

PrizePartner:

  • 俱乐部1:史密斯街头足球俱乐部
  • 俱乐部2:约翰街头足球俱乐部
  • 俱乐部3:里士满足球俱乐部

Now AvailablePartner

  • Club 1 / Club 2
  • Club 1 / Club 3

基本上俱乐部1不能支付奖金,因此它将奖池指向俱乐部2和俱乐部3池。

现在,如果我这样做: PrizePartner

has_many :available_partners

AvailablePartner

belongs_to :prize_partner, :primary_key => :prize_partner_id

您认为这是一个很好的解决方案,还是有一种表可以在rails中引用自己?

谢谢。

可能的答案

这样的事情可能有所帮助:

迁移:

class AddAvailablePartnerToPrizePartner < ActiveRecord::Migration
  def change
    add_column :prize_partners, :available_partner_id, :integer
  end
end

然后:

class PrizePartner < ActiveRecord::Base

 belongs_to :partner, :class_name => 'PrizePartner'
  has_many :nominated_partner, :class_name => 'PrizePartner',:foreign_key => :available_partner_id

end

在控制台中:

 s = PrizePartner.find(1)
 s.nominated_partner

它确实有效:)不确定这是否是最好的方法,但它有效并且我不需要AvailablePartner表

上述解决方案不起作用,因为一个俱乐部可以添加一个俱乐部作为合作伙伴,而每个俱乐部应该能够添加一个以上的俱乐部作为可用的合作伙伴。

回到原点:(

0 个答案:

没有答案