可以手动管理关联吗?

时间:2010-04-06 02:53:23

标签: ruby-on-rails

以下是相关模型:

用户 产品 为了

用户可以出售或购买产品 订单有买方,卖方和一种产品

我知道我可以通过订单和用户之间的HABTM关系来做到这一点,但在我看来,将下面的列放入Order表会更简单:

:seller_id :buyer_id

并手动管理这些关系,因为订单只创建一次,从不编辑。然而,这似乎不像Rails一样,我想知道我是否在HABTM关系中缺少概念性的东西。

2 个答案:

答案 0 :(得分:2)

不,它不是一种红宝石的方式,虽然你创建后没有编辑订单。

在模型中使用以下关系,我认为它会起作用。不检查

User.rb
has_many :users
has_many :purchase, :class_name =>Order, :foreign_key=>'buyer_id'
has_many :sells, :class_name =>Order, :foreign_key=>'seller_id'

Product.rb
belongs_to :user
has_many :orders

Order.rb
belongs_to :buyer, :class_name =>User, :foreign_key=>'buyer_id'
belongs_to :seller, :class_name =>User, :foreign_key=>'seller_id'
belongs_to :product

答案 1 :(得分:0)

您应该使用Rails关联。 has_many关联是您的方案的更好选择。

class User < ActiveRecord::Base
  has_many :buys,  :class_name => "Order", :foreign_key => "buyer_id"
  has_many :sales, :class_name => "Order", :foreign_key => "seller_id"
end

class Product < ActiveRecord::Base
end

class Order < ActiveRecord::Base
  belongs_to :product
  belongs_to :buyer,  :class_name => "User", :foreign_key => "buyer_id"
  belongs_to :seller, :class_name => "User", :foreign_key => "seller_id"
end

现在您可以按如下方式使用关联:

current_user.buys.create(:seller => u, :product => p)
current_user.buys
current_user.sells