2014-09-29 45 views
0

我想創建一個頻繁運行的查詢(即用戶有錯誤)的範圍。問題是我必須加入用戶和帳戶表,然後在帳戶表上運行一個方法來找出哪個用戶有錯誤。換句話說,我需要找到具有錯誤帳戶的用戶。我能夠在賬戶模式是這樣創建這個範圍:如何在Rails中調用聯接表上的方法?

scope :with_errors -> {joins(:user).map(&:status).select{|status| status['code'] == :error}} 

的問題是,我必須定義戶口本上範圍,因爲那時我可以對從返回的ActiveRecord ::關係運行map(&:status)加入。所以,我的問題是:是否可以在「joined」表上運行一個方法,以便我可以在我的User模型上定義這個範圍?

謝謝!

+1

'status' *有*是一種方法嗎?如果您可以使用數據庫查詢(例如, Account.where(:status_code =>'error') – 2014-09-30 00:51:20

+0

不幸的是,'status'必須是一個方法。我們將'user'存儲在cassandra的postgres和'status'中。所以,我不能充分利用所有的棒極了助手。謝謝! – spinlock 2014-09-30 01:13:54

回答

3

This railscast給出了一個合併查詢的例子。在你的情況下,它看起來像:

User.joins(:accounts).merge(Account.with_errors) 
+0

我決定接受這個答案,因爲......嗯......它實際上回答了這個問題:)我認爲我的設置與主流相比有點太遠了,不過受到rails幫助者的支持。 – spinlock 2014-09-30 01:45:05

+0

啊,我忘了你想要一個範圍。那麼,如果你經常使用它,編寫一個只做這兩個的範圍將是微不足道的。 – 2014-09-30 01:54:57

相關問題