2013-11-21 74 views
1

嗨,我是ROR開發人員,並使用rails 3.2.13與Postgres數據庫。基於組數的活動記錄對象

我有兩個型號:

Question 
    attr_accessible :category, :is_active, :question_text, :question_type_id, :survey_id, 
        :user_id 
    has_many :abusive_questions 

而且

AbusiveQuestion 
    attr_accessible :question_id, :user_id, :ipaddress, :posted_by 

    belongs_to :question 

從這個我想這算AbusiveQuestion低於特定值時(例如:5)。

我做了以下從我的rails命令

AbusiveQuestion.count(:group=>"abusive_questions.question_id") 

,並得到

=> {1=>1, 5=>3, 3=>1} 

對於這一結果,關鍵是question_id和值是計數,但,我想這個問題該值大於特定的動態值(例如:2)。

請幫幫我。

回答

1

我想你會想joinQuestionAbusiveQuestion然後用selecthaving得到你想要的東西。

喜歡的東西:

AbusiveQuestion.select('abusive_questions.*, count(question.id) as question_count'). 
    joins(:questions). 
    group('abusive_questions.question_id'). 
    having('count(abusive_questions.question_id) > 5') 
+1

感謝您捕捉那個paren,@teeg! – CDub

+0

感謝您的所有回覆和@CDub。我在你的查詢中遇到了一些問題,所以我利用你的想法得到了我的結果。如下AbusiveQuestion.joins(「在questions.id = abusive_questions.question_id上加入問題」)select('abusive_questions.question_id,count(distinct(question_id) )as question_count')。group('abusive_questions.question_id')。having(「count(abusive_questions.question_id)>?」,limit) – ferdy

0

您可以使用有方法。 http://guides.rubyonrails.org/active_record_querying.html#having

x = YOUR_DYNAMIC_COUNT 
AbusiveQuestion.group(:question_id).having("count_all > ?", x).count 
+0

你必須用'having'條款正確的想法,但你不需要'.count'部分。 OP需要返回實際的'AbusiveQuestion'對象,而不僅僅是返回結果的計數。 count_all也沒有意義; '有'需要執行聚合函數以限制組。 –