我有4个表如下所示:
User:
-id
-name
....
UserMapLayer:
-id
-auto_refresh
....
SystemLayer:
-id
-Name
-Path
UserLayer:
-id
-Name
-Path
我想通过我的用户对象进行查询,该对象将为我提供以下JSON结构中的所有SystemLayer和UserLayer对象
[{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相当新,并且有ZERO想法如何将模型相互映射......这是我的第一次传递......
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
我收到了大量不同的错误,但基本上我甚至都不知道从哪里开始。我甚至不知道如何用谷歌搜索这类问题。我可以在一个直接的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 :(得分:0)
欢迎使用Rails!当您不知道要搜索的内容时,可能很难制定搜索查询!
您正在使用ActiveRecord关联,因此您需要完全熟悉ActiveRecords Association指南以及顶部导航栏中“指南索引”弹出窗口中提供的相关指南。尽可能地坚持官方消息来源,因为多年来模型定义和关联已经发展很多,以提高安全性,所以旧的教程,示例,甚至书籍都会告诉你如何看待以前如何完成,但是可以得到在今天的控制器行动中的无声失败。这些指南真的是一种很好的方式,可以从中获得必要的基础理解,从中发展出真正完整的应用程序。