3

我不得不通過模型權限模型角色和訪問的的has_many關係。軌道/通過協會活動記錄的has_many - 取創紀錄的

我有沒有兩個角色應該具有相同的訪問情況。所以,我創建了一個自定義的驗證,當電流作用(創建)使用被分配相同的訪問如前現有的角色基本上導致一個錯誤消息,

errors.add(:Role, "already exists with selected permissions") if Role.all.map(&:access_ids).include?(self.access_ids) 

這一切工作正常。現在我需要獲取與當前角色具有相同訪問權限的角色。那麼,我該怎麼做?我試圖與

Role.includes(:accesses).where(:accesses => {:id => [1,2]}).count 

但這返回其訪問標識具有的所有角色是1或2(說[1,2,3,4],[1],[2])。我需要的是獲得其訪問IDS正是1和2

這將是很好,如果我可以替代的作用「=>」與「==」在上面的查詢:)但是,這顯然是行不通的。

回答

0

不知道查詢到這一個,但你可以通過紅寶石得到角色做這個

Role.all.to_a.find{|r| r.access_ids == self.access_ids} 

至於下面這觸發了太多的查詢,使用此方法您的評論的迴應,只有將火2個查詢..

Role.includes(:permissions).find{|r| r.permissions.map(&:access_id) == self.access_ids} 

您也可以使用此爲您的驗證,

Role.includes(:permissions).any?{|r| r.permissions.map(&:access_id) == self.access_ids} 

你建議Role.includes(:訪問)觸發三個查詢,而Role.includes(:權限)只觸發2部

+0

hmm..it作品,但不知何故似乎具有很多查詢語句的循環結果。 Theres錯誤也應該是r.access_ids。我建議在數據庫查詢期間避免這種循環。 無論如何,謝謝 – prasvin

+0

您正在使用上面類似的循環來檢查您上面顯示的驗證,這就是爲什麼我建議使用這種技術。如果您可以爲上述驗證提供更好的解決方案,則可以使用相同的查詢來獲取以下角色。 – Dipil