0

我是代码新手,我正在尝试建立两个连接模型:用户模型和产品模型。产品模型有两个用户,一个是所有者,另一个是借款人。用户模型有许多产品,作为所有者和作为借款人。

你知道下面的代码是否符合我的目的吗?

class User
    has_many :products
end

class Product
    belongs_to :owner, class_name: "User", foreign_key: "user_id"
    has_one :borrower, class_name: "User", foreign_key: "user_id"
end
4

2 回答 2

2

实际上,您的产品模型中需要两个不同的列“指向”您的用户模型:

owner_id, borrower_id

您的用户模型应该类似于以下内容:

class User
  has_many :owned_products, class_name: "Product", foreign_key: "owner_id"
  has_many :borrowed_products, class_name: "Product", foreign_key: "borrower_id"
end

和你的产品模型是这样的:

class Product
    belongs_to :owner, class_name: "User", foreign_key: "owner_id"
    belongs_to :borrower, class_name: "User", foreign_key: "borrower_id"
end
于 2013-05-14T07:50:58.907 回答
1

您可以使用 STI 方法(单继承表):

模型用户:

class User < ActiveRecord::Base
   # general attributes and validations and the like
end

车主型号:

class Owner < User
  # specific attributes and/or validations if any
  has_many :products
end

借款人模式:

class Borrower < User
  # specific attributes and/or validations if any
  haas_many :products
end

产品型号:

class Product < ActiveRecord::Base
  # attributes, validation and the like
  belongs_to :owner
  belongs_to :borrower
end

基本上,将 Owner 和 Borrower 组织为 User 类型,继承其属性。

one_owner.products将向您展示 one_owner 拥有的产品

one_borrower.products将向您展示 one_borrower 借用的产品

one_product.owner将向您显示该产品的所有者

one_product.borrower将向您显示该产品的借款人

您可以在此线程中看到一个广泛的示例:Rails Question: belongs_to with STI - 我如何正确地做到这一点?

于 2013-05-14T07:50:11.963 回答