【问题标题】:DRYing up my Rails belongs_to and has_many assosiations干掉我的 Rails 的 belongs_to 和 has_many 关联
【发布时间】:2012-06-16 22:49:48
【问题描述】:

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

目前它是这样工作的:

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,这看起来是正确的,但说实话我迷路了。

任何帮助将不胜感激!

谢谢

【问题讨论】:

  • 现在正常了,注意,class_name选项应该是字符串,即:class_name =&gt; 'Person'

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


【解决方案1】:

我认为 HABTM 对此没有帮助。

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-17
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多