我有一個關係模型,其中兩個用戶可以進入交易兩個項目交換。列trades.item_id爲什麼不存在?
class User < ActiveRecord::Base
has_many :owned_items, class_name: "Item"
has_many :trades_received, class_name: "Trade", through: :owned_items, source: :trades
has_many :trades
has_many :wanted_items, class_name: "Item", through: :trades, source: :item
end
class Item < ActiveRecord::Base
belongs_to :owner, class_name: "User", foreign_key: :user_id
has_many :trades, dependent: :destroy
has_many :trade_requesters, through: :trades
has_many :trade_recipients, through: :trades
end
class Trade < ActiveRecord::Base
belongs_to :trade_requester, class_name: "User"
belongs_to :trade_recipient, class_name: "User"
belongs_to :wanted_item, class_name: "Item", foreign_key: :wanted_item_id
belongs_to :collateral_item, class_name: "Item", foreign_key: :collateral_item_id
end
遷移我的交易表看起來像這樣:
create_table :trades do |t|
t.belongs_to :trade_requester
t.belongs_to :trade_recipient
t.belongs_to :wanted_item
t.belongs_to :collateral_item
end
堆棧跟蹤導致我使用列出所有交易請求一個輔助方法。該行表示@trades = current_user.trades_received.requested.count
,然後放到模型關聯的User上,其中has_many :owned_items, class_name: "Item"
。根據我的理解,它看起來像trades_received
方法,它被稱爲through: :owned_items
和source: :trades
應該引用:wanted_item_id
外鍵進行遷移。但事實並非如此。如果我創建一個遷移來添加item_id
,但它有效,但貿易需要兩個項目,所以我已將它分成兩個wanted_item
和collateral_item
關聯。如何設置該用戶關聯以便引用其他用戶請求的項目?應該項目has_many :trades
,我的方式,或者應該項目belongs_to :trades
?
完整的錯誤:
PG::UndefinedColumn: ERROR: column trades.item_id does not exist
LINE 1: ...LECT COUNT(*) FROM "trades" INNER JOIN "items" ON "trades"."...
^
: SELECT COUNT(*) FROM "trades" INNER JOIN "items" ON "trades"."item_id" = "items"."id" WHERE "items"."user_id" = $1 AND "trades"."approved" IS NULL
tldr:我需要跟蹤一堆複雜的has_many :through
協會,我不認爲我的數據模型是正確的,需要幫助理解爲什麼。謝謝。
'用戶的has_many:trades_received'。所以它應該是'current_user.trades_receiveds'。可能更好地將其更改爲'received_trades'。你的'#requested'方法是什麼?哪條確切的線給你的錯誤? – EJ2015
'requested'是一個範圍,它只是'scope:requested, - > {where(approved:nil)}'。我的錯誤來自於我在頭文件中使用的幫助器,並且涉及用戶模型的':trades_received'關聯。@unkmas認爲這是由於我的設置在Trade和Item之間沒有直接聯繫。 – sabaeus
@sabaeus可以粘貼數據庫schema文件 – krishnar