我正在建立一個協作寫作平臺。用戶可以擁有任何項目可以在任何集合中並且屬於任何用戶的項目集合。這導致了一些問題,但。多個has_many通過關係
這是我的模型關係:
class Association < ActiveRecord::Base
belongs_to :user
belongs_to :set
belongs_to :item
end
class Set < ActiveRecord::Base
has_many :associations
has_many :users, through: :associations
has_many :items, through: :associations
end
class Item < ActiveRecord::Base
has_many :associations
has_many :users, through: :associations
has_many :sets, through: :associations
end
我想不通的「導軌方式」正確處理此。
問題1:
創建新項時,只有該組/項目相關聯地被存儲,而不是用戶:
class ItemsController < ApplicationController
def create
@set = current_user.sets.find(params[:set_id])
@set.where(title: params[:item][:title]).first_or_create!
end
end
* UPDATE *
要解決問題1,最好的辦法是做到以下幾點:
@set = current_user.sets.find(params[:set_id])
@item = Item.where(name: params[:item][:title]).first_or_create!
Association.where(item_id: @item.id, set_id: @set.id, user_id: current_user.id).first_or_create!
雖然感覺非常錯誤!
問題2:
假設的關聯表是從問題1正確填充,以下控制器將返回設定,但無視用戶所有權擁有的所有物品:
class SetsController < ApplicationController
def index
@sets = current_user.sets.includes(:items)
end
end
* UPDATE *
仍然沒有運氣找到答案。 要解釋這個問題好一點:
下面將只返回屬於當前用戶
@sets = current_user.sets.all
但是套,下面將只返回該用戶的組,但將包括所有物品的即使它們不屬於當前用戶也是如此。換句話說,用戶範圍被丟棄。
@sets = current_user.sets.includes(:items)
我一直在試圖解決這一切的一天,似乎無法找到一個領先
將它分成1:Many's ...創建集合的實例。 –
對不起,我沒有關注。 – Joshua