2017-03-07 70 views
2

我有一個會議表,其中有一個具有屬性birthyear的請求者(用戶)。列在那裏,但我收到:SQLite3 :: SQLException:沒有這樣的列:requestor.birthyear

在我所能做的Meeting.find(1).requestor.birthyear

但在會議控制器,它說:no such column: requestor.birthyear

我嘗試添加像在meetings_params users_attributes: [:birthyear]終端,但它沒沒有任何區別。

我錯過了什麼?

下面是完整的文件: 會議控制器

def community 
    if current_user.birthyear != nil 
    @meeting_requests = Meeting.where('meeting_time >= ? AND requestee_id IS ? AND status = ? AND (requestor.birthyear <= ? AND requestor.birthyear >= ?)', Date.today, nil, "Active", current_user.birthyear + 10, current_user.birthyear - 10).order('meeting_time asc') 
    end 
end 

會議模式

class Meeting < ApplicationRecord 
    belongs_to :requestor, class_name: "User" 
    belongs_to :requestee, class_name: "User" 
end 

錯誤:

SQLite3::SQLException: no such column: requestor.birthyear: SELECT "meetings".* FROM "meetings" WHERE (meeting_time >= '2017-03-06' AND requestee_id IS NULL AND status = 'Active' AND (requestor.birthyear <= 1944 AND requestor.birthyear >= 1924)) ORDER BY meeting_time asc 

讓我知道,如果你還需要什麼 - 感謝提前!

UPDATE

試圖加入查詢的表,但不是太內行。我想:

@meeting_requests = Meeting.where('meeting_time >= ? AND requestee_id IS ? AND status = ? ', Date.today, nil, "Active").order('meeting_time asc').joins("INNER JOIN users on requestor.birthyear >= current_user.birthyear + 10") 

,但得到:

ActionView::Template::Error (SQLite3::SQLException: ambiguous column name: status: SELECT "meetings".* FROM "meetings" INNER JOIN users on requestor.birthyear >= current_user.birthyear + 10 WHERE (meeting_time >= '2017-03-07' AND requestee_id IS NULL AND status = 'Active') ORDER BY meeting_time asc):


***** UPDATE ***** 我張貼另一個問題得到的語法。如果它幫助任何人: Rails: Two 'where' queries - each works individually, but not together

回答

2

requestorrequestee是Rails協會。這意味着Rails理解如何從會議中獲得requestor ...

但是 - 您的數據庫不知道requestor是什麼。所以,你不能把它變成一個SQL查詢字符串部分像你已經做在這裏:

AND (requestor.birthyear <= ? AND requestor.birthyear >= ?)' 

相反,你需要使用連接到這些添加到您的查詢,然後弄清楚如何軌名他們爲了訪問他們的列。

+0

如果是這種情況,爲什麼我可以在終端上這樣做,它理解我在說什麼,但不是在控制器中?我打電話給同一個數據庫。另外 - 我該怎麼做。我已經以這種方式設置了數據庫,因此不幸的是,使用連接表重做整個數據庫不是一種選擇。 – gwalshington

+0

你到底在做什麼? 「 –

+0

」已經以這種方式設置了數據庫,因此不幸的是,使用連接表重做整個數據庫不是一種選擇。「哎呀,這不是我所暗示的...我把它當作連接表的錯誤......我的意思是將表添加爲連接到您的查詢。 –

相關問題