【问题标题】:Simple question about ActiveRecord associations关于 ActiveRecord 关联的简单问题
【发布时间】:2009-02-24 18:40:41
【问题描述】:

我的应用程序包含“贷款”的概念。每笔贷款都有债权人、债务人和金额。

从数据库的角度来看,我知道我希望贷款表看起来像这样:

|id|Amount|creditor_id|debtor_id|
| 1|   100|          5|        7|

债权人/债务人 ID 引用用户 ID(即,我的用户表中行的主键)的位置。

我的问题是我应该如何在 ActiveRecord 中进行设置。我不能这样做:

class Loan < ActiveRecord::Base
    has_one :creditor

因为这将导致 Rails 查找“债权人”表(债权人都存储在用户表中)。

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    选项(自然地,在 Rdoc 中有详细记录)是 :class_name。我相信语法是:

    has_one :creditor, :class_name => 'User'
    

    另外,您可能希望将此加入书签:

    http://api.rubyonrails.org/

    下次可以节省几分钟。

    【讨论】:

    • 是的。但是,在速度方面:在浏览器窗口中查找 >> Google >> Stack Overflow。 :-)
    【解决方案2】:

    这并不像看起来那么容易。用户能否既是债权人又是债务人?他们可以拥有多于一笔贷款吗?

    基本上,您似乎想要一个自引用的多对多关系。您需要一个称为贷款的连接模型,因为您的连接表中有额外的数据,因此您应该使用 has-many :through。这是一个很好的blog post,关于 habtm 和 has-many :through 之间的区别。

    有很多关于如何利用模型关系做复杂事情的例子。请注意,尽管所有花哨的模型设置都与如何设置控制器和视图的示例不匹配。似乎教程作者都避开了与控制器和视图的多对多关系的完整示例,因为这非常困难。

    祝你好运

    【讨论】: