0
我試圖創建一個Transaction
,同時是Request
的孩子,也是Inventory
的多對多關係中的一部分。創建一個有兩個關聯的記錄
型號代碼:
class Transaction < ActiveRecord::Base
belongs_to :request
has_many :transactories
has_many :inventories, through: :transactories
end
class Inventory < ActiveRecord::Base
has_many :transactories
has_many :transactions, through: :transactories
end
class Transactory < ActiveRecord::Base
belongs_to :inventory
belongs_to :transaction
end
這裏是我想要達到的流量:
- 用戶發佈包含在哈希的附加數據的請求,其中關鍵=的itemlist_id他們想要什麼,價值=他們想要的itemlist_id的數量。比方說,用戶需要9箇中的兩個,如下所示:{9 => 2}
- 對於用戶提供的散列中的每個itemlist_id,我將查看庫存表內的內容並提取inventory_id,其中itemlist_id匹配用戶正在查找的內容以及該inventory_id的用戶不是用戶自己。假設在庫存表中,有3個ID可以滿足這個要求:[X,Y,Z]
現在我想要做的是創建屬於請求的事務(先前已經創建了請求)並將交易與存貨相互關聯。這一步的結果是兩方面的(我認爲這是更容易從什麼樣的觀點看起來像的角度寫:
- 每個X,Y和Z inventory_id所有人應當看到,有2個交易爲他們的項目(所以他們可以選擇他們想要兌現哪一個)
- ,用戶可以看到,他們的每個2交易,有通知給每個X,Y和Z的所有者
創建關聯的代碼
# Assume overarching parent request has been created, called @requestrecord
# Step 1, @transactionparams = { 9 => 2 }
@transactionparams.each do |itemlist_id, quantity|
# Step 2 matched_inventory_id = [X,Y,Z]
matched_inventory_id = Inventory.where.not(signup_id: @requestrecord.signup.id).where(itemlist_id: itemlist_id).ids
# Step 3, 2 transactions created each with itemlist_id of 9, each associated with inventory_ids X, Y, Z. In turn, inventory_ids X, Y, Z each associated with each of the two transactions created
quantity.to_i.times do
transaction = @requestrecord.transactions.create(itemlist_id: itemlist_id)
transaction.inventories.create matched_inventory_id
end
end
該行中我不能得到正確的是在第3步:
transaction.inventories.create matched_inventory_id
這將引發一個錯誤,對創建的參數必須是一個哈希值。我也嘗試過:
matched_inventory_id.each do |id|
transaction.inventories.create(inventory_id: id)
end
由於inventory_id不是有效的屬性,所以失敗。 所以......兩個問題:
- 如何關聯的每個X,Y,Z庫存ID的每筆交易1和2?
- 如果我寫一行代碼來實現上面的,可以想象(希望),我也實現了反向關聯?意思是在
has_many :through
,只要我把Inventory
與Transactions
聯繫起來,我會自動把Transactions
與Inventories
聯繫起來,對不對?