我有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
任何幫助將不勝感激。
感謝您的鏈接...這是好東西。我從文檔中學到很多東西!我的問題仍然存在,「我正在努力做甚麼現實?」 –
是的!關鍵在於讓一個模型的id在相關表中表示爲main_model_id,因爲然後ActiveRecord會創建必要的存取方法。不要去了解:has_many:through模型,因爲這樣做所有更簡單的相關性都更有意義。 – tobinjim
當你超越ActiveRecord協會內置的能力時,也知道你可以在你的模型上創建你自己的方法來做任何你需要的東西。例如,我經常在我的模型文件中創建兩個方法,一個名爲「about」,另一個名爲「description」「About」是一個類方法,它在離開項目後幾個月提醒我該模型是關於什麼的,什麼是它的弱點是,等等。「描述」通常是我正在查看的記錄集合的控制檯報告。 – tobinjim