以下是相关模型:
用户 产品 为了
用户可以出售或购买产品 订单有买方,卖方和一种产品
我知道我可以通过订单和用户之间的HABTM关系来做到这一点,但在我看来,将下面的列放入Order表会更简单:
:seller_id :buyer_id
并手动管理这些关系,因为订单只创建一次,从不编辑。然而,这似乎不像Rails一样,我想知道我是否在HABTM关系中缺少概念性的东西。
答案 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