Ruby on rails 需要澄清的问题有很多:通过

Ruby on rails 需要澄清的问题有很多:通过,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我正在尝试创建一个简单的亚马逊版本,用户可以在这里买卖产品。我有两种类型的用户:买方和卖方。我还有一个产品模型和一个订单模型 我能够创建允许卖家创建产品以进行销售的功能,但我很难创建买家、订单和产品之间的关联。我认为迄今为止我得到的最接近的结果是: class Product < ActiveRecord::Base has_many :orders has_many :buyers, through: :orders, foreign_key: 'buyer_id' end

我正在尝试创建一个简单的亚马逊版本,用户可以在这里买卖产品。我有两种类型的用户:买方和卖方。我还有一个产品模型和一个订单模型

我能够创建允许卖家创建产品以进行销售的功能,但我很难创建买家、订单和产品之间的关联。我认为迄今为止我得到的最接近的结果是:

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
然后回来:

#<Order:0x007fc76e575728> {
            :id => nil,
       :address => nil,
      :quantity => nil,
    :created_at => nil,
    :updated_at => nil,
      :buyer_id => nil,
    :product_id => 6
}
#{
:id=>nil,
:地址=>nil,
:数量=>零,
:创建时间=>nil,
:更新时间=>nil,
:买方id=>无,
: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.
u=User.first
# {
:id=>1,
:name=>“赫伯特”,
:email=>“h@gmail.com",
:password_digest=>“$2a$10$FqcGq.Z3bKcK2X0gDv9VS.pzw62bcy5ouSF73f3razmhwvJVuOVj6”,
:创建时间=>2015年9月22日星期二16:56:33 UTC+00:00,
:更新时间=>2015年9月22日星期二17:05:43 UTC+00:00
}
u、 命令。构建
ActiveRecord::UnknownAttributeError:订单的未知属性“user\u id”。

出于某种原因,它试图找到“用户id”,但我原以为它会寻找“买家id”。我不认为我对我试图建立的关系有很好的理解。如果有人能准确地说出我的错误,我将不胜感激,谢谢

您需要修复您的模型:

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
class用户有很多:订单,类名:'Order',外键::买方id,相反的::买方
有很多:购买产品,通过::订单,外键:'product\U id',类名:'product'
结束
类顺序
在您的例子中,由于Rails从给定的
用户
构建
订单
,而不知道
用户
订单
的“买家”,因此产生了bug


另外,代码中的
购买的产品
声明需要明确定义
类名
,而Rails无法确定“购买的产品”仅仅是产品。

感谢dimakura的回复。似乎我也遇到了类似的错误:(pry)输出错误:#仔细检查了所有建议更改的内容,没有luck@Banner抱歉,
有很多:订单
应该有更长的选项列表(请参阅更新的答案)不用担心。我做了建议的更改,现在出现以下错误:ActiveRecord::InverseOfAssociationNotFoundError:找不到订单的反向关联(:buyer in User)有很多:订单,类名:'Order',外键::buyer\u id,inverse\u of::buyer
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