2016-11-21 34 views
0

我有如下保持與各school_user相關school_user_id和作業值的表:ROR:幫助簡單相加的SQL查詢

create_table "homework_students", force: :cascade do |t| 
    t.integer "school_user_id", limit: 4, null: false 
    t.integer "homework_id", limit: 4, null: false 
    t.datetime "completed_on" 
    t.datetime "created_at",    null: false 
    t.datetime "updated_at", 

每個school_user與個別功課關聯和功課有很多school_users。

我想在我的視圖中打印連接到單獨作業的總school_users。

在我的控制器:

@total = HomeworkStudent.where("SELECT homework_id FROM homework_students WHERE 'school_user_id = (?)'").sum(:school_user_id) 

模型

homework 
has_many :homework_students, :class_name => 'HomeworkStudent' 

homework_students 
belongs_to :homework, :class_name => 'Homework', :foreign_key => :homework_id 

我不認爲這是正確的,我的語法 - 它讓打印0

任何想法,也更好的方法有人可能會這樣做?

編輯

明白了這一點。

@total = HomeworkStudent.find_by_sql("SELECT homework_id FROM homework_students WHERE school_user_id GROUP BY homework_id").count 

還想知道是否更好的方法。

+0

總和? ..或計數? –

+0

@DavidAldridge嗨!對不起,伯爵。我改變了它,但仍然返回0.我認爲我有我的語法前面的東西... – Co2

回答

2

你做一些錯誤:

  1. where(...)不應該包含WHERE聲明,而不是一個完整的查詢
  2. WHERE語句包含一個佔位符,它沒有用數據填充起來,school_user_id = (?)
  3. 您的WHERE聲明被包裝到'中,導致DB中的字符串被解釋。

試試這個:

@total = HomeworkStudent.where(school_user_id: 123).count 
# or 
@total = HomeworkStudent.where("school_user_id = (?)", 123).count 
+0

謝謝,我做了更改,但它仍然返回0. :(我認爲我接近它 – Co2

+0

當我有問題像這樣,我喜歡把它帶到Rails控制檯'rails c'中,看看SQL是什麼樣子的,聽起來好像你沒有收回任何東西,如果你把'.count'放到最後,你什麼也看不到你可以將你的SQL程序剪切/粘貼到你選擇的SQL程序中看看發生了什麼 – Dan

+0

@Dan謝謝,沒有任何東西會被返回,但是表格是正確填充的 - 這就是問題所在,每個作業都有多個school_users,我只是希望返回每個作業的總數 – Co2