2016-01-20 113 views
0

我有2個模型:訂婚,用戶。參與基本上是指用戶預訂的項目。每次參與都是針對特定用戶的。用戶參與有一個外鍵。我想加入與用戶的接觸,以便我可以看到用戶的詳細信息。Ruby on Rails活動記錄內部連接不工作

這裏是我的模型

class Engagement < ActiveRecord::Base 
    belongs_to :food_item 
    belongs_to :user 
end 
class User < ActiveRecord::Base 
    has_many :engagements 
    has_many :food_item, through: :engagements 
end 

我運行下面的查詢:

Engagement.joins("INNER JOIN users ON users.id = engagements.user_id") 

它不加入這兩個表。

任何幫助將不勝感激

+0

哪些SQL沒有按它會產生嗎? – fengd

+0

你是否收到錯誤信息?如果有,你可以分享嗎? –

+4

只是一個評論,Rails默認使用內部連接,所以你可以做Engagement.joins(:user) –

回答

0

您的查詢是正確的。 您正在進行內部連接,並且只返回與用戶有關係的約會。

要返回用戶數據,你應該這樣做:Engagement.select('tasks.*, users.*').joins(:user)。這樣該對象將具有參與和用戶屬性。但這不是Rails的方式。

「正確」 的方法是:

engagements = Engagement.includes(:user) 
engagements.first.user # this will return the user data 

這樣,你得到所有僱用和預加載用戶數據,這種方式避免了N + 1個查詢(Eager-loading);)

+0

提到的查詢嗨亞歷克斯感謝您的答覆,將嘗試和更新 – Euler

0

試試這個Engagement.joins(:users)

它應該工作。

+0

@giovani上面的查詢也不會提取用戶數據。它給了我相同的結果,我在問題 – Euler

相關問題