Mat*_*ard 2 ruby postgresql ruby-on-rails
我试图找到所有相关的朋友与我的人,自我加入,记录及其所有孩子.
这是我试图运行的一个例子.我有一个人物记录,让我们打电话@person,它有4个'孩子'.
这些孩子都有很多朋友.
当我查询时@person,我想要自己的所有朋友,然后是它下面的四个孩子.
有没有办法做到这一点,没有去:friends = @parent.friends + @parent.children.map {|c| c.friends }?
真的很想用一个数据库查询来做.我的数据库也是postgresql.
以下是我的记录设置方式的示例.
class Person < ActiveRecord::Base
belongs_to :parent, :class_name => "Person", :foreign_key => "parent_person_id"
has_many :children, :class_name => "Person", :foreign_key => "parent_person_id"
has_many :friends
end
class Friend < ActiveRecord::Base
belongs_to :person
end
Run Code Online (Sandbox Code Playgroud)
至于儿童,你的foreign_key必须是id.
has_many :children, :class_name => "Person", :foreign_key => "id"
Run Code Online (Sandbox Code Playgroud)
试试这个:
people_ids = @parent.children.map(&:id).push(@parent.id)
Friend.where(person_id: people_ids)
Run Code Online (Sandbox Code Playgroud)
或者你可以急切地加载相关的表格,如:
friends = Person.includes(:friends).where("parent_person_id = ? or id = ?", [@parent.id, @parent.id]).map(&friends)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4133 次 |
| 最近记录: |