1

我正在开发一个应用程序来计算债务以及谁欠谁等等。

目前它的工作原理是这样的:

create_table "debts", :force => true do |t|
  t.string   "amount"
  t.integer  "payer_id"
  t.integer  "payee_id"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end

create_table "people", :force => true do |t|
  t.string   "name"
  t.integer  "bank"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end

class Debt < ActiveRecord::Base
    attr_accessible :amount, :payee_id, :payer_id

    belongs_to :payee, :class_name => 'Person'
    belongs_to :payer, :class_name => 'Person'
 end

class Person < ActiveRecord::Base
    attr_accessible :amount, :payee_id, :payer_id

    has_many :debts_owed, :class_name => Debt, :foreign_key => "payee_id"
    has_many :debts_to_pay, :class_name => Debt, :foreign_key => "payer_id"
end

它正在工作,但我知道必须有一种更简单的方法来表示同一个模型的多个关联?我一直在阅读 has_and_belongs_to_many 这看起来是正确的,但老实说我迷路了。

任何帮助,将不胜感激!

谢谢

4

2 回答 2

1

我不认为 HABTM 在这里会有所帮助。

HABTM 适用于需要多对多关系的情况,例如标签。如果我有一组博客文章,我可能希望能够标记它们。博客文章可以有许多标签,并且标签可以用于许多博客文章。

在你的情况下,这种关系不会发生。老实说,我不相信有更好的方法来建立你所拥有的关联。

于 2012-06-16T23:01:42.823 回答
0

就两行来说,这不是太多的重复,但是如果你真的想要,你可以做这样的事情:

[:payee, :payer].each {|f| belongs_to(f, :class_name => 'Person') }

所以这是一行而不是两行,但阅读和维护可能不太清楚。如果您有更多行使用相同的 class_name,这可能是值得的。

于 2012-10-31T14:23:13.353 回答