干掉我的Rails belongs_to和has_many关联

时间:2012-06-16 22:49:49

标签: ruby-on-rails has-many belongs-to has-and-belongs-to-many

我正在开发一个可以解决债务问题的应用程序,以及谁欠谁等等。

目前它的工作原理如下:

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,这看起来是正确的,但我很遗憾,说实话。

任何帮助将不胜感激!

由于

2 个答案:

答案 0 :(得分:1)

我认为HABTM不会对此有所帮助。

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

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

答案 1 :(得分:0)

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

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

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