2016-01-25 46 views
0

我有4個表,看起來像下面這樣:如何創建加盟的ActiveRecord與屬性關係表

User: 
-id 
-name 
.... 

UserMapLayer: 
-id 
-auto_refresh 
.... 

SystemLayer: 
-id 
-Name 
-Path 

UserLayer: 
-id 
-Name 
-Path 

我想打通過我的用戶對象的查詢,這將使我所有的SystemLayer和UserLayer在以下JSON結構

[{layer_id: UserMapLayer.id, name: **THE NAME FROM SystemLayer or UserLayer**, path: **THE PATH FROM SystemLayer or UserLayer**, auto_referesh: UserMapLayer.auto_refresh, source: *'SYSTEM' or 'USER' depending on the whether the record is from SystemLayer or UserLayer*}, {....}] 

對象正如你可以看到有我想要存儲在UserMapLayer某些屬性,但我不希望複製之類的名稱,路徑等的連接表。

我是相當新的Rails和ActiveRecord的和爲零的想法如何將模型映射到對方......這是我第一次通...

class User < ActiveRecord::Base 
    has_many :user_map_layers 
end 

class UserMapLayer < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :user_layers 
    belongs_to :system_layers 
end 

class UserLayer < ActiveRecord::Base 
    has_many :user_map_layers 
end 

class SystemLayer < ActiveRecord::Base 
    has_may :user_map_layers 
end 

我得到不同的錯誤過多,但基本上我根本不知道從哪裏開始。我甚至不知道如何爲這種類型的問題提供Google搜索。我可以在直接的SQL Union查詢中編寫這個查詢,所以我想我正在嘗試在ActiveRecord中複製這個查詢。

我猜我試圖用ActiveRecord做下面的SQL查詢:

SELECT ul.name, ul.path, uml.auto_refresh from user_layers ul, user_map_layers uml where 
uml.layer_id = ul.id and uml.type = 'USER' and uml.user_id = 1 
UNION 
SELECT sl.name, sl.path, uml.auto_refresh from system_layers sl, user_map_layers uml where 
uml.layer_id = sl.id and uml.type = 'SYSTEM' and uml.user_id = 1 

任何幫助將不勝感激。

回答

0

歡迎來到Rails!當你不知道要找什麼稱呼你想要的東西時,可能很難制定一個搜索查詢!

您正在使用ActiveRecord協會,因此您需要完全熟悉ActiveRecords Association指南以及頂部導航欄中「指南索引」彈出窗口中提供的相關指南。儘可能地堅持官方消息來源,因爲模型定義和關聯在這些年來已經發展了很多,以提高安全性,所以舊的教程,示例甚至書籍會告訴你如何完成它,但會導致結果在今天的控制器行動中無聲失敗。這些指南確實是獲得必要基礎知識的絕佳方式,可以從中發展出真正的完整應用程序。

+0

感謝您的鏈接...這是好東西。我從文檔中學到很多東西!我的問題仍然存在,「我正在努力做甚麼現實?」 –

+0

是的!關鍵在於讓一個模型的id在相關表中表示爲main_model_id,因爲然後ActiveRecord會創建必要的存取方法。不要去了解:has_many:through模型,因爲這樣做所有更簡單的相關性都更有意義。 – tobinjim

+0

當你超越ActiveRecord協會內置的能力時,也知道你可以在你的模型上創建你自己的方法來做任何你需要的東西。例如,我經常在我的模型文件中創建兩個方法,一個名爲「about」,另一個名爲「description」「About」是一個類方法,它在離開項目後幾個月提醒我該模型是關於什麼的,什麼是它的弱點是,等等。「描述」通常是我正在查看的記錄集合的控制檯報告。 – tobinjim

相關問題