我對RoR非常陌生,並且爲我正在參加的課程創建一個學生項目。我想構建一種我們在課程中未涉及的查詢類型,並且我知道我可以在.NET和SQL中快速完成這些查詢。儘管實現了Ruby方式,但我還是有一段時間。如何聯合表並使結果在Ruby視圖中可訪問
我想要做的事:在用戶的朋友的頁面顯示所有「帖子」的列表。
在用戶貢獻的questions
表和blurbs
表中均可找到「帖子」。我想UNION
這兩個到一個單一的記錄集按照updated_at DESC排序。
然而,表列名稱並不相同,這是我的關鍵點,因爲我見過的其他成功答案取決於列名在兩者之間相同。
在SQL我寫的東西一樣(強調像):
SELECT b.Blurb AS 'UserPost', b.updated_at, u.username as 'Author'
FROM Blurbs b
INNER JOIN Users u ON b.User_ID = u.ID
WHERE u.ID IN
(SELECT f.friend_id FROM Friendships f WHERE f.User_ID = [current user])
ORDER BY b.updated_at DESC
UNION
SELECT q.Question, q.updated_at, u.username
FROM Questions q
INNER JOIN Users u ON q.User_ID = u.ID
WHERE u.ID IN
(SELECT f.friend_id FROM Friendships f WHERE f.User_ID = [current user])
ORDER BY b.updated_at DESC
用戶模型(如適用)的關係是:
has_many :friendships
has_many :friends, through: :friendships
has_many :questions
has_many :blurbs
和質疑,並Blurb的車型都有belongs_to :user
在視圖中,我想顯示'UserPost'列和'作者'的內容。我確信這是可能的,對於ActiveRecord我還是太新,以及如何形成語句。很高興有一些輸入或審查任何相關的鏈接,專門說這個!
最終解決
希望這將有助於其他人在未來的Ruby UNION
問題。感謝@ Plamena的投入最終實現結束爲:
def friend_posts
sql = "...the UNION statement seen above..."
ActiveRecord::Base.connection.select_all(ActiveRecord::Base.send("sanitize_sql_array",[sql, self.id, self.id]))
end
謝謝!我昨天花了幾個小時沒有運氣。這像一個魅力。我使用了你的答案,並查找了'select_all'來查看如何傳遞參數,最後一行代碼如下:'ActiveRecord :: Base.connection.select_all(ActiveRecord :: Base.send(「sanitize_sql_array 「,[sql,self.id,self.id]))' – Monica