我正在尝试创建一个简单的亚马逊版本,用户可以在其中买卖产品。我有两种类型的用户:买方和卖方。我还有一个产品型号和一个订单型号。
我能够创建允许卖家创建产品以便销售它的功能,但是我很难创建买家,订单和产品之间的关联。我认为我到目前为止最接近的是:
class Product < ActiveRecord::Base
has_many :orders
has_many :buyers, through: :orders, foreign_key: 'buyer_id'
end
class User < ActiveRecord::Base
has_many :orders
has_many :bought_products, through: :orders, foreign_key: 'product_id'
end
class Order < ActiveRecord::Base
belongs_to :buyer
belongs_to :product
end
我认为这是最接近的原因是因为我能够进入命令行并执行:
p = Product.first
p.orders.build
然后回来:
#<Order:0x007fc76e575728> {
:id => nil,
:address => nil,
:quantity => nil,
:created_at => nil,
:updated_at => nil,
:buyer_id => nil,
:product_id => 6
}
然而,当我从另一个方向来时,我没有这样的运气:
u = User.first
#<User:0x007fc76e53f4e8> {
:id => 1,
:name => "Herbert",
:email => "h@gmail.com",
:password_digest => "$2a$10$FqcGq.Z3bKcK2X0gDv9VS.pzw62bcy5ouSF73f3razmhwvJVuOVj6",
:created_at => Tue, 22 Sep 2015 16:56:33 UTC +00:00,
:updated_at => Tue, 22 Sep 2015 17:05:43 UTC +00:00
}
u.orders.build
ActiveRecord::UnknownAttributeError: unknown attribute 'user_id' for Order.
出于某种原因,它试图找到'user_id',但我认为它会寻找'buyer_id'。我不认为我对我想要建立的关系有很好的理解。如果有人能够确切地解决我出错的地方,我将不胜感激,谢谢!
答案 0 :(得分:2)
您需要修复模型:
class User < ActiveRecord::Base
has_many :orders, class_name: 'Order', foreign_key: :buyer_id, inverse_of: :buyer
has_many :bought_products, through: :orders, foreign_key: 'product_id', class_name: 'Product'
end
class Order < ActiveRecord::Base
belongs_to :buyer, class_name: 'User', inverse_of: :orders
belongs_to :product
end
在你的情况下产生了bug,因为Rails从给定的Order
构建User
,不知道User
是&#34;买家&#34;对于Order
。
您的代码中的bought_products
声明也需要明确定义class_name
,而Rails无法确定&#34;已购买的产品&#34;只是产品。