0
一個排除我有一個users
表和blocked_users
表。 users
有我所有的認證數據,現場的喜好等,並blocked_users
有source_id
和target_id
。續集進行以下一個查詢運行從連接表
我想回到所有用戶,用戶沒有堵塞,並且沒有阻止當前用戶的集合。
現在我有下面的代碼,我通過調用@user.available_users
執行,但它執行三個查詢。有沒有辦法讓這個單一的查詢?
class User < Sequel::Model
one_to_many :blocked_users, :key=>:source_id
one_to_many :blocked_by_users, :key=>:target_id, :class => BlockedUser
def block_user(id)
BlockedUser.create({source_id:self.id, target_id:id})
end
def blocked_user_ids
self.blocked_users.map{|bu| bu[:target_id]}
end
def blocked_by_user_ids
self.blocked_by_users.map{|bu| bu[:target_id]}
end
def available_users
User.exclude(:id=>self.blocked_users.map{|bu| bu[:target_id]}).exclude(:id=>self.blocked_by_users.map{|bu| bu[:target_id]})
end
end
我添加下面的方法來我的用戶等級:
def test_avail
User.exclude(:blocked_users=>self).exclude(:blocked_by_users=>self)
end
1.9.3p0 :001 > User.all.first.test_avail
INFO - (0.000732s) SELECT * FROM `users`
Sequel::Error: invalid association class User for association :blocked_users used in dataset filter for model User, expected class BlockedUser
嘿,所以我說的變化在上面的問題,但現在與片斷我得到 續集::錯誤:無效的關聯類用戶的關聯:在數據集過濾器用於模型用戶blocked_users,預計類BLOCKEDUSER – jdkealy
我的錯。如果blocked_users和blocked_by_users是自引用的many_to_many關聯,則該代碼將工作。相反,您正在使用單獨的BlockedUser類和one_to_many關聯。我不確定你爲什麼這樣設置它。根據您目前的代碼,你應該能夠做到User.exclude(:ID => self.blocked_users_dataset.select(:target_id))。 –