试图学习 Rails 3 并加入一个辅助项目,但遇到了一个我不太明白的加入。这是课程:
class Stuff
belongs_to :user
has_many :things
end
class Thing
belongs_to :user
belongs_to :stuff
end
class User
has_many :stuffs
has_many :things
end
这是样本数据:
Stuff Thing User
id|user_id|data id|user_id|stuff_id|data id
--|-------|---- --|-------|--------|---- --
1 |2 |n 1 |1 |nil |m 1
2 |3 |o 2 |3 |2 |p 2
3 |3 |nil |q 3
4
想退货:
- 所有同时拥有 A 和 B 的用户,以获取用户、A、B 作为结果,以及
- 所有具有 A 或 B 的用户,以获得用户 A 或用户 B 组合。
对上述数据的查询将产生:
Stuff Thing User
--------------------------
nil 1|1|nil|m 1
1|2|n nil 2
2|3|o 2|3|2|p 3
3|3|nil|q 3
可以完成一些像下面这样的内部连接,然后用 ruby 删除只有 A 的用户或只有 B 的用户,这些用户与具有 A 和 B 的用户的结果重叠。
User.includes(:as,:bs).joins(:as, :bs)
User.includes(:as).joins(:as)
User.includes(:bs).joins(:bs)
关于如何通过单个连接原始 sql 或活动记录查询接口来完成这一切的任何想法?